!
function(a, b) {
    function c(a) {
        var b = a.length,
        c = ka.type(a);
        return ka.isWindow(a) ? !1 : 1 === a.nodeType && b ? !0 : "array" === c || "function" !== c && (0 === b || "number" == typeof b && b > 0 && b - 1 in a)
    }
    function d(a) {
        var b = za[a] = {};
        return ka.each(a.match(ma) || [],
        function(a, c) {
            b[c] = !0
        }),
        b
    }
    function e(a, c, d, e) {
        if (ka.acceptData(a)) {
            var f, g, h = ka.expando,
            i = a.nodeType,
            j = i ? ka.cache: a,
            k = i ? a[h] : a[h] && h;
            if (k && j[k] && (e || j[k].data) || d !== b || "string" != typeof c) return k || (k = i ? a[h] = ba.pop() || ka.guid++:h),
            j[k] || (j[k] = i ? {}: {
                toJSON: ka.noop
            }),
            ("object" == typeof c || "function" == typeof c) && (e ? j[k] = ka.extend(j[k], c) : j[k].data = ka.extend(j[k].data, c)),
            g = j[k],
            e || (g.data || (g.data = {}), g = g.data),
            d !== b && (g[ka.camelCase(c)] = d),
            "string" == typeof c ? (f = g[c], null == f && (f = g[ka.camelCase(c)])) : f = g,
            f
        }
    }
    function f(a, b, c) {
        if (ka.acceptData(a)) {
            var d, e, f = a.nodeType,
            g = f ? ka.cache: a,
            i = f ? a[ka.expando] : ka.expando;
            if (g[i]) {
                if (b && (d = c ? g[i] : g[i].data)) {
                    ka.isArray(b) ? b = b.concat(ka.map(b, ka.camelCase)) : b in d ? b = [b] : (b = ka.camelCase(b), b = b in d ? [b] : b.split(" ")),
                    e = b.length;
                    for (; e--;) delete d[b[e]];
                    if (c ? !h(d) : !ka.isEmptyObject(d)) return
                } (c || (delete g[i].data, h(g[i]))) && (f ? ka.cleanData([a], !0) : ka.support.deleteExpando || g != g.window ? delete g[i] : g[i] = null)
            }
        }
    }
    function g(a, c, d) {
        if (d === b && 1 === a.nodeType) {
            var e = "data-" + c.replace(Ba, "-$1").toLowerCase();
            if (d = a.getAttribute(e), "string" == typeof d) {
                try {
                    d = "true" === d ? !0 : "false" === d ? !1 : "null" === d ? null: +d + "" === d ? +d: Aa.test(d) ? ka.parseJSON(d) : d
                } catch(f) {}
                ka.data(a, c, d)
            } else d = b
        }
        return d
    }
    function h(a) {
        var b;
        for (b in a) if (("data" !== b || !ka.isEmptyObject(a[b])) && "toJSON" !== b) return ! 1;
        return ! 0
    }
    function i() {
        return ! 0
    }
    function j() {
        return ! 1
    }
    function k() {
        try {
            return Y.activeElement
        } catch(a) {}
    }
    function l(a, b) {
        do a = a[b];
        while (a && 1 !== a.nodeType);
        return a
    }
    function m(a, b, c) {
        if (ka.isFunction(b)) return ka.grep(a,
        function(a, d) {
            return !! b.call(a, d, a) !== c
        });
        if (b.nodeType) return ka.grep(a,
        function(a) {
            return a === b !== c
        });
        if ("string" == typeof b) {
            if (Qa.test(b)) return ka.filter(b, a, c);
            b = ka.filter(b, a)
        }
        return ka.grep(a,
        function(a) {
            return ka.inArray(a, b) >= 0 !== c
        })
    }
    function n(a) {
        var b = Ua.split("|"),
        c = a.createDocumentFragment();
        if (c.createElement) for (; b.length;) c.createElement(b.pop());
        return c
    }
    function o(a, b) {
        return ka.nodeName(a, "table") && ka.nodeName(1 === b.nodeType ? b: b.firstChild, "tr") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a
    }
    function p(a) {
        return a.type = (null !== ka.find.attr(a, "type")) + "/" + a.type,
        a
    }
    function q(a) {
        var b = eb.exec(a.type);
        return b ? a.type = b[1] : a.removeAttribute("type"),
        a
    }
    function r(a, b) {
        for (var c, d = 0; null != (c = a[d]); d++) ka._data(c, "globalEval", !b || ka._data(b[d], "globalEval"))
    }
    function s(a, b) {
        if (1 === b.nodeType && ka.hasData(a)) {
            var c, d, e, f = ka._data(a),
            g = ka._data(b, f),
            h = f.events;
            if (h) {
                delete g.handle,
                g.events = {};
                for (c in h) for (d = 0, e = h[c].length; e > d; d++) ka.event.add(b, c, h[c][d])
            }
            g.data && (g.data = ka.extend({},
            g.data))
        }
    }
    function t(a, b) {
        var c, d, e;
        if (1 === b.nodeType) {
            if (c = b.nodeName.toLowerCase(), !ka.support.noCloneEvent && b[ka.expando]) {
                e = ka._data(b);
                for (d in e.events) ka.removeEvent(b, d, e.handle);
                b.removeAttribute(ka.expando)
            }
            "script" === c && b.text !== a.text ? (p(b).text = a.text, q(b)) : "object" === c ? (b.parentNode && (b.outerHTML = a.outerHTML), ka.support.html5Clone && a.innerHTML && !ka.trim(b.innerHTML) && (b.innerHTML = a.innerHTML)) : "input" === c && bb.test(a.type) ? (b.defaultChecked = b.checked = a.checked, b.value !== a.value && (b.value = a.value)) : "option" === c ? b.defaultSelected = b.selected = a.defaultSelected: ("input" === c || "textarea" === c) && (b.defaultValue = a.defaultValue)
        }
    }
    function u(a, c) {
        var d, e, f = 0,
        g = typeof a.getElementsByTagName !== W ? a.getElementsByTagName(c || "*") : typeof a.querySelectorAll !== W ? a.querySelectorAll(c || "*") : b;
        if (!g) for (g = [], d = a.childNodes || a; null != (e = d[f]); f++) ! c || ka.nodeName(e, c) ? g.push(e) : ka.merge(g, u(e, c));
        return c === b || c && ka.nodeName(a, c) ? ka.merge([a], g) : g
    }
    function v(a) {
        bb.test(a.type) && (a.defaultChecked = a.checked)
    }
    function w(a, b) {
        if (b in a) return b;
        for (var c = b.charAt(0).toUpperCase() + b.slice(1), d = b, e = yb.length; e--;) if (b = yb[e] + c, b in a) return b;
        return d
    }
    function x(a, b) {
        return a = b || a,
        "none" === ka.css(a, "display") || !ka.contains(a.ownerDocument, a)
    }
    function y(a, b) {
        for (var c, d, e, f = [], g = 0, h = a.length; h > g; g++) d = a[g],
        d.style && (f[g] = ka._data(d, "olddisplay"), c = d.style.display, b ? (f[g] || "none" !== c || (d.style.display = ""), "" === d.style.display && x(d) && (f[g] = ka._data(d, "olddisplay", C(d.nodeName)))) : f[g] || (e = x(d), (c && "none" !== c || !e) && ka._data(d, "olddisplay", e ? c: ka.css(d, "display"))));
        for (g = 0; h > g; g++) d = a[g],
        d.style && (b && "none" !== d.style.display && "" !== d.style.display || (d.style.display = b ? f[g] || "": "none"));
        return a
    }
    function z(a, b, c) {
        var d = rb.exec(b);
        return d ? Math.max(0, d[1] - (c || 0)) + (d[2] || "px") : b
    }
    function A(a, b, c, d, e) {
        for (var f = c === (d ? "border": "content") ? 4 : "width" === b ? 1 : 0, g = 0; 4 > f; f += 2)"margin" === c && (g += ka.css(a, c + xb[f], !0, e)),
        d ? ("content" === c && (g -= ka.css(a, "padding" + xb[f], !0, e)), "margin" !== c && (g -= ka.css(a, "border" + xb[f] + "Width", !0, e))) : (g += ka.css(a, "padding" + xb[f], !0, e), "padding" !== c && (g += ka.css(a, "border" + xb[f] + "Width", !0, e)));
        return g
    }
    function B(a, b, c) {
        var d = !0,
        e = "width" === b ? a.offsetWidth: a.offsetHeight,
        f = kb(a),
        g = ka.support.boxSizing && "border-box" === ka.css(a, "boxSizing", !1, f);
        if (0 >= e || null == e) {
            if (e = lb(a, b, f), (0 > e || null == e) && (e = a.style[b]), sb.test(e)) return e;
            d = g && (ka.support.boxSizingReliable || e === a.style[b]),
            e = parseFloat(e) || 0
        }
        return e + A(a, b, c || (g ? "border": "content"), d, f) + "px"
    }
    function C(a) {
        var b = Y,
        c = ub[a];
        return c || (c = D(a, b), "none" !== c && c || (jb = (jb || ka("<iframe frameborder='0' width='0' height='0'/>").css("cssText", "display:block !important")).appendTo(b.documentElement), b = (jb[0].contentWindow || jb[0].contentDocument).document, b.write("<!doctype html><html><body>"), b.close(), c = D(a, b), jb.detach()), ub[a] = c),
        c
    }
    function D(a, b) {
        var c = ka(b.createElement(a)).appendTo(b.body),
        d = ka.css(c[0], "display");
        return c.remove(),
        d
    }
    function E(a, b, c, d) {
        var e;
        if (ka.isArray(b)) ka.each(b,
        function(b, e) {
            c || Ab.test(a) ? d(a, e) : E(a + "[" + ("object" == typeof e ? b: "") + "]", e, c, d)
        });
        else if (c || "object" !== ka.type(b)) d(a, b);
        else for (e in b) E(a + "[" + e + "]", b[e], c, d)
    }
    function F(a) {
        return function(b, c) {
            "string" != typeof b && (c = b, b = "*");
            var d, e = 0,
            f = b.toLowerCase().match(ma) || [];
            if (ka.isFunction(c)) for (; d = f[e++];)"+" === d[0] ? (d = d.slice(1) || "*", (a[d] = a[d] || []).unshift(c)) : (a[d] = a[d] || []).push(c)
        }
    }
    function G(a, b, c, d) {
        function e(h) {
            var i;
            return f[h] = !0,
            ka.each(a[h] || [],
            function(a, h) {
                var j = h(b, c, d);
                return "string" != typeof j || g || f[j] ? g ? !(i = j) : void 0 : (b.dataTypes.unshift(j), e(j), !1)
            }),
            i
        }
        var f = {},
        g = a === Rb;
        return e(b.dataTypes[0]) || !f["*"] && e("*")
    }
    function H(a, c) {
        var d, e, f = ka.ajaxSettings.flatOptions || {};
        for (e in c) c[e] !== b && ((f[e] ? a: d || (d = {}))[e] = c[e]);
        return d && ka.extend(!0, a, d),
        a
    }
    function I(a, c, d) {
        for (var e, f, g, h, i = a.contents,
        j = a.dataTypes;
        "*" === j[0];) j.shift(),
        f === b && (f = a.mimeType || c.getResponseHeader("Content-Type"));
        if (f) for (h in i) if (i[h] && i[h].test(f)) {
            j.unshift(h);
            break
        }
        if (j[0] in d) g = j[0];
        else {
            for (h in d) {
                if (!j[0] || a.converters[h + " " + j[0]]) {
                    g = h;
                    break
                }
                e || (e = h)
            }
            g = g || e
        }
        return g ? (g !== j[0] && j.unshift(g), d[g]) : void 0
    }
    function J(a, b, c, d) {
        var e, f, g, h, i, j = {},
        k = a.dataTypes.slice();
        if (k[1]) for (g in a.converters) j[g.toLowerCase()] = a.converters[g];
        for (f = k.shift(); f;) if (a.responseFields[f] && (c[a.responseFields[f]] = b), !i && d && a.dataFilter && (b = a.dataFilter(b, a.dataType)), i = f, f = k.shift()) if ("*" === f) f = i;
        else if ("*" !== i && i !== f) {
            if (g = j[i + " " + f] || j["* " + f], !g) for (e in j) if (h = e.split(" "), h[1] === f && (g = j[i + " " + h[0]] || j["* " + h[0]])) {
                g === !0 ? g = j[e] : j[e] !== !0 && (f = h[0], k.unshift(h[1]));
                break
            }
            if (g !== !0) if (g && a["throws"]) b = g(b);
            else try {
                b = g(b)
            } catch(l) {
                return {
                    state: "parsererror",
                    error: g ? l: "No conversion from " + i + " to " + f
                }
            }
        }
        return {
            state: "success",
            data: b
        }
    }
    function K() {
        try {
            return new a.XMLHttpRequest
        } catch(b) {}
    }
    function L() {
        try {
            return new a.ActiveXObject("Microsoft.XMLHTTP")
        } catch(b) {}
    }
    function M() {
        return setTimeout(function() {
            $b = b
        }),
        $b = ka.now()
    }
    function N(a, b, c) {
        for (var d, e = (ec[b] || []).concat(ec["*"]), f = 0, g = e.length; g > f; f++) if (d = e[f].call(c, b, a)) return d
    }
    function O(a, b, c) {
        var d, e, f = 0,
        g = dc.length,
        h = ka.Deferred().always(function() {
            delete i.elem
        }),
        i = function() {
            if (e) return ! 1;
            for (var b = $b || M(), c = Math.max(0, j.startTime + j.duration - b), d = c / j.duration || 0, f = 1 - d, g = 0, i = j.tweens.length; i > g; g++) j.tweens[g].run(f);
            return h.notifyWith(a, [j, f, c]),
            1 > f && i ? c: (h.resolveWith(a, [j]), !1)
        },
        j = h.promise({
            elem: a,
            props: ka.extend({},
            b),
            opts: ka.extend(!0, {
                specialEasing: {}
            },
            c),
            originalProperties: b,
            originalOptions: c,
            startTime: $b || M(),
            duration: c.duration,
            tweens: [],
            createTween: function(b, c) {
                var d = ka.Tween(a, j.opts, b, c, j.opts.specialEasing[b] || j.opts.easing);
                return j.tweens.push(d),
                d
            },
            stop: function(b) {
                var c = 0,
                d = b ? j.tweens.length: 0;
                if (e) return this;
                for (e = !0; d > c; c++) j.tweens[c].run(1);
                return b ? h.resolveWith(a, [j, b]) : h.rejectWith(a, [j, b]),
                this
            }
        }),
        k = j.props;
        for (P(k, j.opts.specialEasing); g > f; f++) if (d = dc[f].call(j, a, k, j.opts)) return d;
        return ka.map(k, N, j),
        ka.isFunction(j.opts.start) && j.opts.start.call(a, j),
        ka.fx.timer(ka.extend(i, {
            elem: a,
            anim: j,
            queue: j.opts.queue
        })),
        j.progress(j.opts.progress).done(j.opts.done, j.opts.complete).fail(j.opts.fail).always(j.opts.always)
    }
    function P(a, b) {
        var c, d, e, f, g;
        for (c in a) if (d = ka.camelCase(c), e = b[d], f = a[c], ka.isArray(f) && (e = f[1], f = a[c] = f[0]), c !== d && (a[d] = f, delete a[c]), g = ka.cssHooks[d], g && "expand" in g) {
            f = g.expand(f),
            delete a[d];
            for (c in f) c in a || (a[c] = f[c], b[c] = e)
        } else b[d] = e
    }
    function Q(a, b, c) {
        var d, e, f, g, h, i, j = this,
        k = {},
        l = a.style,
        m = a.nodeType && x(a),
        n = ka._data(a, "fxshow");
        c.queue || (h = ka._queueHooks(a, "fx"), null == h.unqueued && (h.unqueued = 0, i = h.empty.fire, h.empty.fire = function() {
            h.unqueued || i()
        }), h.unqueued++, j.always(function() {
            j.always(function() {
                h.unqueued--,
                ka.queue(a, "fx").length || h.empty.fire()
            })
        })),
        1 === a.nodeType && ("height" in b || "width" in b) && (c.overflow = [l.overflow, l.overflowX, l.overflowY], "inline" === ka.css(a, "display") && "none" === ka.css(a, "float") && (ka.support.inlineBlockNeedsLayout && "inline" !== C(a.nodeName) ? l.zoom = 1 : l.display = "inline-block")),
        c.overflow && (l.overflow = "hidden", ka.support.shrinkWrapBlocks || j.always(function() {
            l.overflow = c.overflow[0],
            l.overflowX = c.overflow[1],
            l.overflowY = c.overflow[2]
        }));
        for (d in b) if (e = b[d], ac.exec(e)) {
            if (delete b[d], f = f || "toggle" === e, e === (m ? "hide": "show")) continue;
            k[d] = n && n[d] || ka.style(a, d)
        }
        if (!ka.isEmptyObject(k)) {
            n ? "hidden" in n && (m = n.hidden) : n = ka._data(a, "fxshow", {}),
            f && (n.hidden = !m),
            m ? ka(a).show() : j.done(function() {
                ka(a).hide()
            }),
            j.done(function() {
                var b;
                ka._removeData(a, "fxshow");
                for (b in k) ka.style(a, b, k[b])
            });
            for (d in k) g = N(m ? n[d] : 0, d, j),
            d in n || (n[d] = g.start, m && (g.end = g.start, g.start = "width" === d || "height" === d ? 1 : 0))
        }
    }
    function R(a, b, c, d, e) {
        return new R.prototype.init(a, b, c, d, e)
    }
    function S(a, b) {
        var c, d = {
            height: a
        },
        e = 0;
        for (b = b ? 1 : 0; 4 > e; e += 2 - b) c = xb[e],
        d["margin" + c] = d["padding" + c] = a;
        return b && (d.opacity = d.width = a),
        d
    }
    function T(a) {
        return ka.isWindow(a) ? a: 9 === a.nodeType ? a.defaultView || a.parentWindow: !1
    }
    var U, V, W = typeof b,
    X = a.location,
    Y = a.document,
    Z = Y.documentElement,
    $ = a.jQuery,
    _ = a.$,
    aa = {},
    ba = [],
    ca = "1.10.1",
    da = ba.concat,
    ea = ba.push,
    fa = ba.slice,
    ga = ba.indexOf,
    ha = aa.toString,
    ia = aa.hasOwnProperty,
    ja = ca.trim,
    ka = function(a, b) {
        return new ka.fn.init(a, b, V)
    },
    la = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
    ma = /\S+/g,
    na = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
    oa = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
    pa = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
    qa = /^[\],:{}\s]*$/,
    ra = /(?:^|:|,)(?:\s*\[)+/g,
    sa = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
    ta = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
    ua = /^-ms-/,
    va = /-([\da-z])/gi,
    wa = function(a, b) {
        return b.toUpperCase()
    },
    xa = function(a) { (Y.addEventListener || "load" === a.type || "complete" === Y.readyState) && (ya(), ka.ready())
    },
    ya = function() {
        Y.addEventListener ? (Y.removeEventListener("DOMContentLoaded", xa, !1), a.removeEventListener("load", xa, !1)) : (Y.detachEvent("onreadystatechange", xa), a.detachEvent("onload", xa))
    };
    ka.fn = ka.prototype = {
        jquery: ca,
        constructor: ka,
        init: function(a, c, d) {
            var e, f;
            if (!a) return this;
            if ("string" == typeof a) {
                if (e = "<" === a.charAt(0) && ">" === a.charAt(a.length - 1) && a.length >= 3 ? [null, a, null] : oa.exec(a), !e || !e[1] && c) return ! c || c.jquery ? (c || d).find(a) : this.constructor(c).find(a);
                if (e[1]) {
                    if (c = c instanceof ka ? c[0] : c, ka.merge(this, ka.parseHTML(e[1], c && c.nodeType ? c.ownerDocument || c: Y, !0)), pa.test(e[1]) && ka.isPlainObject(c)) for (e in c) ka.isFunction(this[e]) ? this[e](c[e]) : this.attr(e, c[e]);
                    return this
                }
                if (f = Y.getElementById(e[2]), f && f.parentNode) {
                    if (f.id !== e[2]) return d.find(a);
                    this.length = 1,
                    this[0] = f
                }
                return this.context = Y,
                this.selector = a,
                this
            }
            return a.nodeType ? (this.context = this[0] = a, this.length = 1, this) : ka.isFunction(a) ? d.ready(a) : (a.selector !== b && (this.selector = a.selector, this.context = a.context), ka.makeArray(a, this))
        },
        selector: "",
        length: 0,
        toArray: function() {
            return fa.call(this)
        },
        get: function(a) {
            return null == a ? this.toArray() : 0 > a ? this[this.length + a] : this[a]
        },
        pushStack: function(a) {
            var b = ka.merge(this.constructor(), a);
            return b.prevObject = this,
            b.context = this.context,
            b
        },
        each: function(a, b) {
            return ka.each(this, a, b)
        },
        ready: function(a) {
            return ka.ready.promise().done(a),
            this
        },
        slice: function() {
            return this.pushStack(fa.apply(this, arguments))
        },
        first: function() {
            return this.eq(0)
        },
        last: function() {
            return this.eq( - 1)
        },
        eq: function(a) {
            var b = this.length,
            c = +a + (0 > a ? b: 0);
            return this.pushStack(c >= 0 && b > c ? [this[c]] : [])
        },
        map: function(a) {
            return this.pushStack(ka.map(this,
            function(b, c) {
                return a.call(b, c, b)
            }))
        },
        end: function() {
            return this.prevObject || this.constructor(null)
        },
        push: ea,
        sort: [].sort,
        splice: [].splice
    },
    ka.fn.init.prototype = ka.fn,
    ka.extend = ka.fn.extend = function() {
        var a, c, d, e, f, g, h = arguments[0] || {},
        i = 1,
        j = arguments.length,
        k = !1;
        for ("boolean" == typeof h && (k = h, h = arguments[1] || {},
        i = 2), "object" == typeof h || ka.isFunction(h) || (h = {}), j === i && (h = this, --i); j > i; i++) if (null != (f = arguments[i])) for (e in f) a = h[e],
        d = f[e],
        h !== d && (k && d && (ka.isPlainObject(d) || (c = ka.isArray(d))) ? (c ? (c = !1, g = a && ka.isArray(a) ? a: []) : g = a && ka.isPlainObject(a) ? a: {},
        h[e] = ka.extend(k, g, d)) : d !== b && (h[e] = d));
        return h
    },
    ka.extend({
        expando: "jQuery" + (ca + Math.random()).replace(/\D/g, ""),
        noConflict: function(b) {
            return a.$ === ka && (a.$ = _),
            b && a.jQuery === ka && (a.jQuery = $),
            ka
        },
        isReady: !1,
        readyWait: 1,
        holdReady: function(a) {
            a ? ka.readyWait++:ka.ready(!0)
        },
        ready: function(a) {
            if (a === !0 ? !--ka.readyWait: !ka.isReady) {
                if (!Y.body) return setTimeout(ka.ready);
                ka.isReady = !0,
                a !== !0 && --ka.readyWait > 0 || (U.resolveWith(Y, [ka]), ka.fn.trigger && ka(Y).trigger("ready").off("ready"))
            }
        },
        isFunction: function(a) {
            return "function" === ka.type(a)
        },
        isArray: Array.isArray ||
        function(a) {
            return "array" === ka.type(a)
        },
        isWindow: function(a) {
            return null != a && a == a.window
        },
        isNumeric: function(a) {
            return ! isNaN(parseFloat(a)) && isFinite(a)
        },
        type: function(a) {
            return null == a ? String(a) : "object" == typeof a || "function" == typeof a ? aa[ha.call(a)] || "object": typeof a
        },
        isPlainObject: function(a) {
            var c;
            if (!a || "object" !== ka.type(a) || a.nodeType || ka.isWindow(a)) return ! 1;
            try {
                if (a.constructor && !ia.call(a, "constructor") && !ia.call(a.constructor.prototype, "isPrototypeOf")) return ! 1
            } catch(d) {
                return ! 1
            }
            if (ka.support.ownLast) for (c in a) return ia.call(a, c);
            for (c in a);
            return c === b || ia.call(a, c)
        },
        isEmptyObject: function(a) {
            var b;
            for (b in a) return ! 1;
            return ! 0
        },
        error: function(a) {
            throw new Error(a)
        },
        parseHTML: function(a, b, c) {
            if (!a || "string" != typeof a) return null;
            "boolean" == typeof b && (c = b, b = !1),
            b = b || Y;
            var d = pa.exec(a),
            e = !c && [];
            return d ? [b.createElement(d[1])] : (d = ka.buildFragment([a], b, e), e && ka(e).remove(), ka.merge([], d.childNodes))
        },
        parseJSON: function(b) {
            return a.JSON && a.JSON.parse ? a.JSON.parse(b) : null === b ? b: "string" == typeof b && (b = ka.trim(b), b && qa.test(b.replace(sa, "@").replace(ta, "]").replace(ra, ""))) ? new Function("return " + b)() : void ka.error("Invalid JSON: " + b)
        },
        parseXML: function(c) {
            var d, e;
            if (!c || "string" != typeof c) return null;
            try {
                a.DOMParser ? (e = new DOMParser, d = e.parseFromString(c, "text/xml")) : (d = new ActiveXObject("Microsoft.XMLDOM"), d.async = "false", d.loadXML(c))
            } catch(f) {
                d = b
            }
            return d && d.documentElement && !d.getElementsByTagName("parsererror").length || ka.error("Invalid XML: " + c),
            d
        },
        noop: function() {},
        globalEval: function(b) {
            b && ka.trim(b) && (a.execScript ||
            function(b) {
                a.eval.call(a, b)
            })(b)
        },
        camelCase: function(a) {
            return a.replace(ua, "ms-").replace(va, wa)
        },
        nodeName: function(a, b) {
            return a.nodeName && a.nodeName.toLowerCase() === b.toLowerCase()
        },
        each: function(a, b, d) {
            var e, f = 0,
            g = a.length,
            h = c(a);
            if (d) {
                if (h) for (; g > f && (e = b.apply(a[f], d), e !== !1); f++);
                else for (f in a) if (e = b.apply(a[f], d), e === !1) break
            } else if (h) for (; g > f && (e = b.call(a[f], f, a[f]), e !== !1); f++);
            else for (f in a) if (e = b.call(a[f], f, a[f]), e === !1) break;
            return a
        },
        trim: ja && !ja.call("\ufeff ") ?
        function(a) {
            return null == a ? "": ja.call(a)
        }: function(a) {
            return null == a ? "": (a + "").replace(na, "")
        },
        makeArray: function(a, b) {
            var d = b || [];
            return null != a && (c(Object(a)) ? ka.merge(d, "string" == typeof a ? [a] : a) : ea.call(d, a)),
            d
        },
        inArray: function(a, b, c) {
            var d;
            if (b) {
                if (ga) return ga.call(b, a, c);
                for (d = b.length, c = c ? 0 > c ? Math.max(0, d + c) : c: 0; d > c; c++) if (c in b && b[c] === a) return c
            }
            return - 1
        },
        merge: function(a, c) {
            var d = c.length,
            e = a.length,
            f = 0;
            if ("number" == typeof d) for (; d > f; f++) a[e++] = c[f];
            else for (; c[f] !== b;) a[e++] = c[f++];
            return a.length = e,
            a
        },
        grep: function(a, b, c) {
            var d, e = [],
            f = 0,
            g = a.length;
            for (c = !!c; g > f; f++) d = !!b(a[f], f),
            c !== d && e.push(a[f]);
            return e
        },
        map: function(a, b, d) {
            var e, f = 0,
            g = a.length,
            h = c(a),
            i = [];
            if (h) for (; g > f; f++) e = b(a[f], f, d),
            null != e && (i[i.length] = e);
            else for (f in a) e = b(a[f], f, d),
            null != e && (i[i.length] = e);
            return da.apply([], i)
        },
        guid: 1,
        proxy: function(a, c) {
            var d, e, f;
            return "string" == typeof c && (f = a[c], c = a, a = f),
            ka.isFunction(a) ? (d = fa.call(arguments, 2), e = function() {
                return a.apply(c || this, d.concat(fa.call(arguments)))
            },
            e.guid = a.guid = a.guid || ka.guid++, e) : b
        },
        access: function(a, c, d, e, f, g, h) {
            var i = 0,
            j = a.length,
            k = null == d;
            if ("object" === ka.type(d)) {
                f = !0;
                for (i in d) ka.access(a, c, i, d[i], !0, g, h)
            } else if (e !== b && (f = !0, ka.isFunction(e) || (h = !0), k && (h ? (c.call(a, e), c = null) : (k = c, c = function(a, b, c) {
                return k.call(ka(a), c)
            })), c)) for (; j > i; i++) c(a[i], d, h ? e: e.call(a[i], i, c(a[i], d)));
            return f ? a: k ? c.call(a) : j ? c(a[0], d) : g
        },
        now: function() {
            return (new Date).getTime()
        },
        swap: function(a, b, c, d) {
            var e, f, g = {};
            for (f in b) g[f] = a.style[f],
            a.style[f] = b[f];
            e = c.apply(a, d || []);
            for (f in b) a.style[f] = g[f];
            return e
        }
    }),
    ka.ready.promise = function(b) {
        if (!U) if (U = ka.Deferred(), "complete" === Y.readyState) setTimeout(ka.ready);
        else if (Y.addEventListener) Y.addEventListener("DOMContentLoaded", xa, !1),
        a.addEventListener("load", xa, !1);
        else {
            Y.attachEvent("onreadystatechange", xa),
            a.attachEvent("onload", xa);
            var c = !1;
            try {
                c = null == a.frameElement && Y.documentElement
            } catch(d) {}
            c && c.doScroll && !
            function e() {
                if (!ka.isReady) {
                    try {
                        c.doScroll("left")
                    } catch(a) {
                        return setTimeout(e, 50)
                    }
                    ya(),
                    ka.ready()
                }
            } ()
        }
        return U.promise(b)
    },
    ka.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),
    function(a, b) {
        aa["[object " + b + "]"] = b.toLowerCase()
    }),
    V = ka(Y),
    function(a, b) {
        function c(a, b, c, d) {
            var e, f, g, h, i, j, k, l, m, n;
            if ((b ? b.ownerDocument || b: S) !== K && J(b), b = b || K, c = c || [], !a || "string" != typeof a) return c;
            if (1 !== (h = b.nodeType) && 9 !== h) return [];
            if (M && !d) {
                if (e = xa.exec(a)) if (g = e[1]) {
                    if (9 === h) {
                        if (f = b.getElementById(g), !f || !f.parentNode) return c;
                        if (f.id === g) return c.push(f),
                        c
                    } else if (b.ownerDocument && (f = b.ownerDocument.getElementById(g)) && Q(b, f) && f.id === g) return c.push(f),
                    c
                } else {
                    if (e[2]) return ea.apply(c, b.getElementsByTagName(a)),
                    c;
                    if ((g = e[3]) && B.getElementsByClassName && b.getElementsByClassName) return ea.apply(c, b.getElementsByClassName(g)),
                    c
                }
                if (B.qsa && (!N || !N.test(a))) {
                    if (l = k = R, m = b, n = 9 === h && a, 1 === h && "object" !== b.nodeName.toLowerCase()) {
                        for (j = p(a), (k = b.getAttribute("id")) ? l = k.replace(Aa, "\\$&") : b.setAttribute("id", l), l = "[id='" + l + "'] ", i = j.length; i--;) j[i] = l + q(j[i]);
                        m = ra.test(a) && b.parentNode || b,
                        n = j.join(",")
                    }
                    if (n) try {
                        return ea.apply(c, m.querySelectorAll(n)),
                        c
                    } catch(o) {} finally {
                        k || b.removeAttribute("id")
                    }
                }
            }
            return y(a.replace(oa, "$1"), b, c, d)
        }
        function d(a) {
            return wa.test(a + "")
        }
        function e() {
            function a(c, d) {
                return b.push(c += " ") > D.cacheLength && delete a[b.shift()],
                a[c] = d
            }
            var b = [];
            return a
        }
        function f(a) {
            return a[R] = !0,
            a
        }
        function g(a) {
            var b = K.createElement("div");
            try {
                return !! a(b)
            } catch(c) {
                return ! 1
            } finally {
                b.parentNode && b.parentNode.removeChild(b),
                b = null
            }
        }
        function h(a, b, c) {
            a = a.split("|");
            for (var d, e = a.length,
            f = c ? null: b; e--;)(d = D.attrHandle[a[e]]) && d !== b || (D.attrHandle[a[e]] = f)
        }
        function i(a, b) {
            var c = a.getAttributeNode(b);
            return c && c.specified ? c.value: a[b] === !0 ? b.toLowerCase() : null
        }
        function j(a, b) {
            return a.getAttribute(b, "type" === b.toLowerCase() ? 1 : 2)
        }
        function k(a) {
            return "input" === a.nodeName.toLowerCase() ? a.defaultValue: void 0
        }
        function l(a, b) {
            var c = b && a,
            d = c && 1 === a.nodeType && 1 === b.nodeType && (~b.sourceIndex || _) - (~a.sourceIndex || _);
            if (d) return d;
            if (c) for (; c = c.nextSibling;) if (c === b) return - 1;
            return a ? 1 : -1
        }
        function m(a) {
            return function(b) {
                var c = b.nodeName.toLowerCase();
                return "input" === c && b.type === a
            }
        }
        function n(a) {
            return function(b) {
                var c = b.nodeName.toLowerCase();
                return ("input" === c || "button" === c) && b.type === a
            }
        }
        function o(a) {
            return f(function(b) {
                return b = +b,
                f(function(c, d) {
                    for (var e, f = a([], c.length, b), g = f.length; g--;) c[e = f[g]] && (c[e] = !(d[e] = c[e]))
                })
            })
        }
        function p(a, b) {
            var d, e, f, g, h, i, j, k = W[a + " "];
            if (k) return b ? 0 : k.slice(0);
            for (h = a, i = [], j = D.preFilter; h;) { (!d || (e = pa.exec(h))) && (e && (h = h.slice(e[0].length) || h), i.push(f = [])),
                d = !1,
                (e = qa.exec(h)) && (d = e.shift(), f.push({
                    value: d,
                    type: e[0].replace(oa, " ")
                }), h = h.slice(d.length));
                for (g in D.filter) ! (e = va[g].exec(h)) || j[g] && !(e = j[g](e)) || (d = e.shift(), f.push({
                    value: d,
                    type: g,
                    matches: e
                }), h = h.slice(d.length));
                if (!d) break
            }
            return b ? h.length: h ? c.error(a) : W(a, i).slice(0)
        }
        function q(a) {
            for (var b = 0,
            c = a.length,
            d = ""; c > b; b++) d += a[b].value;
            return d
        }
        function r(a, b, c) {
            var d = b.dir,
            e = c && "parentNode" === d,
            f = U++;
            return b.first ?
            function(b, c, f) {
                for (; b = b[d];) if (1 === b.nodeType || e) return a(b, c, f)
            }: function(b, c, g) {
                var h, i, j, k = T + " " + f;
                if (g) {
                    for (; b = b[d];) if ((1 === b.nodeType || e) && a(b, c, g)) return ! 0
                } else for (; b = b[d];) if (1 === b.nodeType || e) if (j = b[R] || (b[R] = {}), (i = j[d]) && i[0] === k) {
                    if ((h = i[1]) === !0 || h === C) return h === !0
                } else if (i = j[d] = [k], i[1] = a(b, c, g) || C, i[1] === !0) return ! 0
            }
        }
        function s(a) {
            return a.length > 1 ?
            function(b, c, d) {
                for (var e = a.length; e--;) if (!a[e](b, c, d)) return ! 1;
                return ! 0
            }: a[0]
        }
        function t(a, b, c, d, e) {
            for (var f, g = [], h = 0, i = a.length, j = null != b; i > h; h++)(f = a[h]) && (!c || c(f, d, e)) && (g.push(f), j && b.push(h));
            return g
        }
        function u(a, b, c, d, e, g) {
            return d && !d[R] && (d = u(d)),
            e && !e[R] && (e = u(e, g)),
            f(function(f, g, h, i) {
                var j, k, l, m = [],
                n = [],
                o = g.length,
                p = f || x(b || "*", h.nodeType ? [h] : h, []),
                q = !a || !f && b ? p: t(p, m, a, h, i),
                r = c ? e || (f ? a: o || d) ? [] : g: q;
                if (c && c(q, r, h, i), d) for (j = t(r, n), d(j, [], h, i), k = j.length; k--;)(l = j[k]) && (r[n[k]] = !(q[n[k]] = l));
                if (f) {
                    if (e || a) {
                        if (e) {
                            for (j = [], k = r.length; k--;)(l = r[k]) && j.push(q[k] = l);
                            e(null, r = [], j, i)
                        }
                        for (k = r.length; k--;)(l = r[k]) && (j = e ? ga.call(f, l) : m[k]) > -1 && (f[j] = !(g[j] = l))
                    }
                } else r = t(r === g ? r.splice(o, r.length) : r),
                e ? e(null, g, r, i) : ea.apply(g, r)
            })
        }
        function v(a) {
            for (var b, c, d, e = a.length,
            f = D.relative[a[0].type], g = f || D.relative[" "], h = f ? 1 : 0, i = r(function(a) {
                return a === b
            },
            g, !0), j = r(function(a) {
                return ga.call(b, a) > -1
            },
            g, !0), k = [function(a, c, d) {
                return ! f && (d || c !== H) || ((b = c).nodeType ? i(a, c, d) : j(a, c, d))
            }]; e > h; h++) if (c = D.relative[a[h].type]) k = [r(s(k), c)];
            else {
                if (c = D.filter[a[h].type].apply(null, a[h].matches), c[R]) {
                    for (d = ++h; e > d && !D.relative[a[d].type]; d++);
                    return u(h > 1 && s(k), h > 1 && q(a.slice(0, h - 1).concat({
                        value: " " === a[h - 2].type ? "*": ""
                    })).replace(oa, "$1"), c, d > h && v(a.slice(h, d)), e > d && v(a = a.slice(d)), e > d && q(a))
                }
                k.push(c)
            }
            return s(k)
        }
        function w(a, b) {
            var d = 0,
            e = b.length > 0,
            g = a.length > 0,
            h = function(f, h, i, j, k) {
                var l, m, n, o = [],
                p = 0,
                q = "0",
                r = f && [],
                s = null != k,
                u = H,
                v = f || g && D.find.TAG("*", k && h.parentNode || h),
                w = T += null == u ? 1 : Math.random() || .1;
                for (s && (H = h !== K && h, C = d); null != (l = v[q]); q++) {
                    if (g && l) {
                        for (m = 0; n = a[m++];) if (n(l, h, i)) {
                            j.push(l);
                            break
                        }
                        s && (T = w, C = ++d)
                    }
                    e && ((l = !n && l) && p--, f && r.push(l))
                }
                if (p += q, e && q !== p) {
                    for (m = 0; n = b[m++];) n(r, o, h, i);
                    if (f) {
                        if (p > 0) for (; q--;) r[q] || o[q] || (o[q] = ca.call(j));
                        o = t(o)
                    }
                    ea.apply(j, o),
                    s && !f && o.length > 0 && p + b.length > 1 && c.uniqueSort(j)
                }
                return s && (T = w, H = u),
                r
            };
            return e ? f(h) : h
        }
        function x(a, b, d) {
            for (var e = 0,
            f = b.length; f > e; e++) c(a, b[e], d);
            return d
        }
        function y(a, b, c, d) {
            var e, f, g, h, i, j = p(a);
            if (!d && 1 === j.length) {
                if (f = j[0] = j[0].slice(0), f.length > 2 && "ID" === (g = f[0]).type && B.getById && 9 === b.nodeType && M && D.relative[f[1].type]) {
                    if (b = (D.find.ID(g.matches[0].replace(Ba, Ca), b) || [])[0], !b) return c;
                    a = a.slice(f.shift().value.length)
                }
                for (e = va.needsContext.test(a) ? 0 : f.length; e--&&(g = f[e], !D.relative[h = g.type]);) if ((i = D.find[h]) && (d = i(g.matches[0].replace(Ba, Ca), ra.test(f[0].type) && b.parentNode || b))) {
                    if (f.splice(e, 1), a = d.length && q(f), !a) return ea.apply(c, d),
                    c;
                    break
                }
            }
            return G(a, j)(d, b, !M, c, ra.test(a)),
            c
        }
        function z() {}
        var A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R = "sizzle" + -new Date,
        S = a.document,
        T = 0,
        U = 0,
        V = e(),
        W = e(),
        X = e(),
        Y = !1,
        Z = function() {
            return 0
        },
        $ = typeof b,
        _ = 1 << 31,
        aa = {}.hasOwnProperty,
        ba = [],
        ca = ba.pop,
        da = ba.push,
        ea = ba.push,
        fa = ba.slice,
        ga = ba.indexOf ||
        function(a) {
            for (var b = 0,
            c = this.length; c > b; b++) if (this[b] === a) return b;
            return - 1
        },
        ha = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
        ia = "[\\x20\\t\\r\\n\\f]",
        ja = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
        la = ja.replace("w", "w#"),
        ma = "\\[" + ia + "*(" + ja + ")" + ia + "*(?:([*^$|!~]?=)" + ia + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + la + ")|)|)" + ia + "*\\]",
        na = ":(" + ja + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + ma.replace(3, 8) + ")*)|.*)\\)|)",
        oa = new RegExp("^" + ia + "+|((?:^|[^\\\\])(?:\\\\.)*)" + ia + "+$", "g"),
        pa = new RegExp("^" + ia + "*," + ia + "*"),
        qa = new RegExp("^" + ia + "*([>+~]|" + ia + ")" + ia + "*"),
        ra = new RegExp(ia + "*[+~]"),
        sa = new RegExp("=" + ia + "*([^\\]'\"]*)" + ia + "*\\]", "g"),
        ta = new RegExp(na),
        ua = new RegExp("^" + la + "$"),
        va = {
            ID: new RegExp("^#(" + ja + ")"),
            CLASS: new RegExp("^\\.(" + ja + ")"),
            TAG: new RegExp("^(" + ja.replace("w", "w*") + ")"),
            ATTR: new RegExp("^" + ma),
            PSEUDO: new RegExp("^" + na),
            CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + ia + "*(even|odd|(([+-]|)(\\d*)n|)" + ia + "*(?:([+-]|)" + ia + "*(\\d+)|))" + ia + "*\\)|)", "i"),
            bool: new RegExp("^(?:" + ha + ")$", "i"),
            needsContext: new RegExp("^" + ia + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + ia + "*((?:-\\d)?\\d*)" + ia + "*\\)|)(?=[^-]|$)", "i")
        },
        wa = /^[^{]+\{\s*\[native \w/,
        xa = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
        ya = /^(?:input|select|textarea|button)$/i,
        za = /^h\d$/i,
        Aa = /'|\\/g,
        Ba = new RegExp("\\\\([\\da-f]{1,6}" + ia + "?|(" + ia + ")|.)", "ig"),
        Ca = function(a, b, c) {
            var d = "0x" + b - 65536;
            return d !== d || c ? b: 0 > d ? String.fromCharCode(d + 65536) : String.fromCharCode(d >> 10 | 55296, 1023 & d | 56320)
        };
        try {
            ea.apply(ba = fa.call(S.childNodes), S.childNodes),
            ba[S.childNodes.length].nodeType
        } catch(Da) {
            ea = {
                apply: ba.length ?
                function(a, b) {
                    da.apply(a, fa.call(b))
                }: function(a, b) {
                    for (var c = a.length,
                    d = 0; a[c++] = b[d++];);
                    a.length = c - 1
                }
            }
        }
        F = c.isXML = function(a) {
            var b = a && (a.ownerDocument || a).documentElement;
            return b ? "HTML" !== b.nodeName: !1
        },
        B = c.support = {},
        J = c.setDocument = function(a) {
            var b = a ? a.ownerDocument || a: S,
            c = b.parentWindow;
            return b !== K && 9 === b.nodeType && b.documentElement ? (K = b, L = b.documentElement, M = !F(b), c && c.frameElement && c.attachEvent("onbeforeunload",
            function() {
                J()
            }), B.attributes = g(function(a) {
                return a.innerHTML = "<a href='#'></a>",
                h("type|href|height|width", j, "#" === a.firstChild.getAttribute("href")),
                h(ha, i, null == a.getAttribute("disabled")),
                a.className = "i",
                !a.getAttribute("className")
            }), B.input = g(function(a) {
                return a.innerHTML = "<input>",
                a.firstChild.setAttribute("value", ""),
                "" === a.firstChild.getAttribute("value")
            }), h("value", k, B.attributes && B.input), B.getElementsByTagName = g(function(a) {
                return a.appendChild(b.createComment("")),
                !a.getElementsByTagName("*").length
            }), B.getElementsByClassName = g(function(a) {
                return a.innerHTML = "<div class='a'></div><div class='a i'></div>",
                a.firstChild.className = "i",
                2 === a.getElementsByClassName("i").length
            }), B.getById = g(function(a) {
                return L.appendChild(a).id = R,
                !b.getElementsByName || !b.getElementsByName(R).length
            }), B.getById ? (D.find.ID = function(a, b) {
                if (typeof b.getElementById !== $ && M) {
                    var c = b.getElementById(a);
                    return c && c.parentNode ? [c] : []
                }
            },
            D.filter.ID = function(a) {
                var b = a.replace(Ba, Ca);
                return function(a) {
                    return a.getAttribute("id") === b
                }
            }) : (delete D.find.ID, D.filter.ID = function(a) {
                var b = a.replace(Ba, Ca);
                return function(a) {
                    var c = typeof a.getAttributeNode !== $ && a.getAttributeNode("id");
                    return c && c.value === b
                }
            }), D.find.TAG = B.getElementsByTagName ?
            function(a, b) {
                return typeof b.getElementsByTagName !== $ ? b.getElementsByTagName(a) : void 0
            }: function(a, b) {
                var c, d = [],
                e = 0,
                f = b.getElementsByTagName(a);
                if ("*" === a) {
                    for (; c = f[e++];) 1 === c.nodeType && d.push(c);
                    return d
                }
                return f
            },
            D.find.CLASS = B.getElementsByClassName &&
            function(a, b) {
                return typeof b.getElementsByClassName !== $ && M ? b.getElementsByClassName(a) : void 0
            },
            O = [], N = [], (B.qsa = d(b.querySelectorAll)) && (g(function(a) {
                a.innerHTML = "<select><option selected=''></option></select>",
                a.querySelectorAll("[selected]").length || N.push("\\[" + ia + "*(?:value|" + ha + ")"),
                a.querySelectorAll(":checked").length || N.push(":checked")
            }), g(function(a) {
                var c = b.createElement("input");
                c.setAttribute("type", "hidden"),
                a.appendChild(c).setAttribute("t", ""),
                a.querySelectorAll("[t^='']").length && N.push("[*^$]=" + ia + "*(?:''|\"\")"),
                a.querySelectorAll(":enabled").length || N.push(":enabled", ":disabled"),
                a.querySelectorAll("*,:x"),
                N.push(",.*:")
            })), (B.matchesSelector = d(P = L.webkitMatchesSelector || L.mozMatchesSelector || L.oMatchesSelector || L.msMatchesSelector)) && g(function(a) {
                B.disconnectedMatch = P.call(a, "div"),
                P.call(a, "[s!='']:x"),
                O.push("!=", na)
            }), N = N.length && new RegExp(N.join("|")), O = O.length && new RegExp(O.join("|")), Q = d(L.contains) || L.compareDocumentPosition ?
            function(a, b) {
                var c = 9 === a.nodeType ? a.documentElement: a,
                d = b && b.parentNode;
                return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d)))
            }: function(a, b) {
                if (b) for (; b = b.parentNode;) if (b === a) return ! 0;
                return ! 1
            },
            B.sortDetached = g(function(a) {
                return 1 & a.compareDocumentPosition(b.createElement("div"))
            }), Z = L.compareDocumentPosition ?
            function(a, c) {
                if (a === c) return Y = !0,
                0;
                var d = c.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition(c);
                return d ? 1 & d || !B.sortDetached && c.compareDocumentPosition(a) === d ? a === b || Q(S, a) ? -1 : c === b || Q(S, c) ? 1 : I ? ga.call(I, a) - ga.call(I, c) : 0 : 4 & d ? -1 : 1 : a.compareDocumentPosition ? -1 : 1
            }: function(a, c) {
                var d, e = 0,
                f = a.parentNode,
                g = c.parentNode,
                h = [a],
                i = [c];
                if (a === c) return Y = !0,
                0;
                if (!f || !g) return a === b ? -1 : c === b ? 1 : f ? -1 : g ? 1 : I ? ga.call(I, a) - ga.call(I, c) : 0;
                if (f === g) return l(a, c);
                for (d = a; d = d.parentNode;) h.unshift(d);
                for (d = c; d = d.parentNode;) i.unshift(d);
                for (; h[e] === i[e];) e++;
                return e ? l(h[e], i[e]) : h[e] === S ? -1 : i[e] === S ? 1 : 0
            },
            b) : K
        },
        c.matches = function(a, b) {
            return c(a, null, null, b)
        },
        c.matchesSelector = function(a, b) {
            if ((a.ownerDocument || a) !== K && J(a), b = b.replace(sa, "='$1']"), B.matchesSelector && M && (!O || !O.test(b)) && (!N || !N.test(b))) try {
                var d = P.call(a, b);
                if (d || B.disconnectedMatch || a.document && 11 !== a.document.nodeType) return d
            } catch(e) {}
            return c(b, K, null, [a]).length > 0
        },
        c.contains = function(a, b) {
            return (a.ownerDocument || a) !== K && J(a),
            Q(a, b)
        },
        c.attr = function(a, c) { (a.ownerDocument || a) !== K && J(a);
            var d = D.attrHandle[c.toLowerCase()],
            e = d && aa.call(D.attrHandle, c.toLowerCase()) ? d(a, c, !M) : b;
            return e === b ? B.attributes || !M ? a.getAttribute(c) : (e = a.getAttributeNode(c)) && e.specified ? e.value: null: e
        },
        c.error = function(a) {
            throw new Error("Syntax error, unrecognized expression: " + a)
        },
        c.uniqueSort = function(a) {
            var b, c = [],
            d = 0,
            e = 0;
            if (Y = !B.detectDuplicates, I = !B.sortStable && a.slice(0), a.sort(Z), Y) {
                for (; b = a[e++];) b === a[e] && (d = c.push(e));
                for (; d--;) a.splice(c[d], 1)
            }
            return a
        },
        E = c.getText = function(a) {
            var b, c = "",
            d = 0,
            e = a.nodeType;
            if (e) {
                if (1 === e || 9 === e || 11 === e) {
                    if ("string" == typeof a.textContent) return a.textContent;
                    for (a = a.firstChild; a; a = a.nextSibling) c += E(a)
                } else if (3 === e || 4 === e) return a.nodeValue
            } else for (; b = a[d]; d++) c += E(b);
            return c
        },
        D = c.selectors = {
            cacheLength: 50,
            createPseudo: f,
            match: va,
            attrHandle: {},
            find: {},
            relative: {
                ">": {
                    dir: "parentNode",
                    first: !0
                },
                " ": {
                    dir: "parentNode"
                },
                "+": {
                    dir: "previousSibling",
                    first: !0
                },
                "~": {
                    dir: "previousSibling"
                }
            },
            preFilter: {
                ATTR: function(a) {
                    return a[1] = a[1].replace(Ba, Ca),
                    a[3] = (a[4] || a[5] || "").replace(Ba, Ca),
                    "~=" === a[2] && (a[3] = " " + a[3] + " "),
                    a.slice(0, 4)
                },
                CHILD: function(a) {
                    return a[1] = a[1].toLowerCase(),
                    "nth" === a[1].slice(0, 3) ? (a[3] || c.error(a[0]), a[4] = +(a[4] ? a[5] + (a[6] || 1) : 2 * ("even" === a[3] || "odd" === a[3])), a[5] = +(a[7] + a[8] || "odd" === a[3])) : a[3] && c.error(a[0]),
                    a
                },
                PSEUDO: function(a) {
                    var c, d = !a[5] && a[2];
                    return va.CHILD.test(a[0]) ? null: (a[3] && a[4] !== b ? a[2] = a[4] : d && ta.test(d) && (c = p(d, !0)) && (c = d.indexOf(")", d.length - c) - d.length) && (a[0] = a[0].slice(0, c), a[2] = d.slice(0, c)), a.slice(0, 3))
                }
            },
            filter: {
                TAG: function(a) {
                    var b = a.replace(Ba, Ca).toLowerCase();
                    return "*" === a ?
                    function() {
                        return ! 0
                    }: function(a) {
                        return a.nodeName && a.nodeName.toLowerCase() === b
                    }
                },
                CLASS: function(a) {
                    var b = V[a + " "];
                    return b || (b = new RegExp("(^|" + ia + ")" + a + "(" + ia + "|$)")) && V(a,
                    function(a) {
                        return b.test("string" == typeof a.className && a.className || typeof a.getAttribute !== $ && a.getAttribute("class") || "")
                    })
                },
                ATTR: function(a, b, d) {
                    return function(e) {
                        var f = c.attr(e, a);
                        return null == f ? "!=" === b: b ? (f += "", "=" === b ? f === d: "!=" === b ? f !== d: "^=" === b ? d && 0 === f.indexOf(d) : "*=" === b ? d && f.indexOf(d) > -1 : "$=" === b ? d && f.slice( - d.length) === d: "~=" === b ? (" " + f + " ").indexOf(d) > -1 : "|=" === b ? f === d || f.slice(0, d.length + 1) === d + "-": !1) : !0
                    }
                },
                CHILD: function(a, b, c, d, e) {
                    var f = "nth" !== a.slice(0, 3),
                    g = "last" !== a.slice( - 4),
                    h = "of-type" === b;
                    return 1 === d && 0 === e ?
                    function(a) {
                        return !! a.parentNode
                    }: function(b, c, i) {
                        var j, k, l, m, n, o, p = f !== g ? "nextSibling": "previousSibling",
                        q = b.parentNode,
                        r = h && b.nodeName.toLowerCase(),
                        s = !i && !h;
                        if (q) {
                            if (f) {
                                for (; p;) {
                                    for (l = b; l = l[p];) if (h ? l.nodeName.toLowerCase() === r: 1 === l.nodeType) return ! 1;
                                    o = p = "only" === a && !o && "nextSibling"
                                }
                                return ! 0
                            }
                            if (o = [g ? q.firstChild: q.lastChild], g && s) {
                                for (k = q[R] || (q[R] = {}), j = k[a] || [], n = j[0] === T && j[1], m = j[0] === T && j[2], l = n && q.childNodes[n]; l = ++n && l && l[p] || (m = n = 0) || o.pop();) if (1 === l.nodeType && ++m && l === b) {
                                    k[a] = [T, n, m];
                                    break
                                }
                            } else if (s && (j = (b[R] || (b[R] = {}))[a]) && j[0] === T) m = j[1];
                            else for (; (l = ++n && l && l[p] || (m = n = 0) || o.pop()) && ((h ? l.nodeName.toLowerCase() !== r: 1 !== l.nodeType) || !++m || (s && ((l[R] || (l[R] = {}))[a] = [T, m]), l !== b)););
                            return m -= e,
                            m === d || m % d === 0 && m / d >= 0
                        }
                    }
                },
                PSEUDO: function(a, b) {
                    var d, e = D.pseudos[a] || D.setFilters[a.toLowerCase()] || c.error("unsupported pseudo: " + a);
                    return e[R] ? e(b) : e.length > 1 ? (d = [a, a, "", b], D.setFilters.hasOwnProperty(a.toLowerCase()) ? f(function(a, c) {
                        for (var d, f = e(a, b), g = f.length; g--;) d = ga.call(a, f[g]),
                        a[d] = !(c[d] = f[g])
                    }) : function(a) {
                        return e(a, 0, d)
                    }) : e
                }
            },
            pseudos: {
                not: f(function(a) {
                    var b = [],
                    c = [],
                    d = G(a.replace(oa, "$1"));
                    return d[R] ? f(function(a, b, c, e) {
                        for (var f, g = d(a, null, e, []), h = a.length; h--;)(f = g[h]) && (a[h] = !(b[h] = f))
                    }) : function(a, e, f) {
                        return b[0] = a,
                        d(b, null, f, c),
                        !c.pop()
                    }
                }),
                has: f(function(a) {
                    return function(b) {
                        return c(a, b).length > 0
                    }
                }),
                contains: f(function(a) {
                    return function(b) {
                        return (b.textContent || b.innerText || E(b)).indexOf(a) > -1
                    }
                }),
                lang: f(function(a) {
                    return ua.test(a || "") || c.error("unsupported lang: " + a),
                    a = a.replace(Ba, Ca).toLowerCase(),
                    function(b) {
                        var c;
                        do
                        if (c = M ? b.lang: b.getAttribute("xml:lang") || b.getAttribute("lang")) return c = c.toLowerCase(),
                        c === a || 0 === c.indexOf(a + "-");
                        while ((b = b.parentNode) && 1 === b.nodeType);
                        return ! 1
                    }
                }),
                target: function(b) {
                    var c = a.location && a.location.hash;
                    return c && c.slice(1) === b.id
                },
                root: function(a) {
                    return a === L
                },
                focus: function(a) {
                    return a === K.activeElement && (!K.hasFocus || K.hasFocus()) && !!(a.type || a.href || ~a.tabIndex)
                },
                enabled: function(a) {
                    return a.disabled === !1
                },
                disabled: function(a) {
                    return a.disabled === !0
                },
                checked: function(a) {
                    var b = a.nodeName.toLowerCase();
                    return "input" === b && !!a.checked || "option" === b && !!a.selected
                },
                selected: function(a) {
                    return a.parentNode && a.parentNode.selectedIndex,
                    a.selected === !0
                },
                empty: function(a) {
                    for (a = a.firstChild; a; a = a.nextSibling) if (a.nodeName > "@" || 3 === a.nodeType || 4 === a.nodeType) return ! 1;
                    return ! 0
                },
                parent: function(a) {
                    return ! D.pseudos.empty(a)
                },
                header: function(a) {
                    return za.test(a.nodeName)
                },
                input: function(a) {
                    return ya.test(a.nodeName)
                },
                button: function(a) {
                    var b = a.nodeName.toLowerCase();
                    return "input" === b && "button" === a.type || "button" === b
                },
                text: function(a) {
                    var b;
                    return "input" === a.nodeName.toLowerCase() && "text" === a.type && (null == (b = a.getAttribute("type")) || b.toLowerCase() === a.type)
                },
                first: o(function() {
                    return [0]
                }),
                last: o(function(a, b) {
                    return [b - 1]
                }),
                eq: o(function(a, b, c) {
                    return [0 > c ? c + b: c]
                }),
                even: o(function(a, b) {
                    for (var c = 0; b > c; c += 2) a.push(c);
                    return a
                }),
                odd: o(function(a, b) {
                    for (var c = 1; b > c; c += 2) a.push(c);
                    return a
                }),
                lt: o(function(a, b, c) {
                    for (var d = 0 > c ? c + b: c; --d >= 0;) a.push(d);
                    return a
                }),
                gt: o(function(a, b, c) {
                    for (var d = 0 > c ? c + b: c; ++d < b;) a.push(d);
                    return a
                })
            }
        };
        for (A in {
            radio: !0,
            checkbox: !0,
            file: !0,
            password: !0,
            image: !0
        }) D.pseudos[A] = m(A);
        for (A in {
            submit: !0,
            reset: !0
        }) D.pseudos[A] = n(A);
        G = c.compile = function(a, b) {
            var c, d = [],
            e = [],
            f = X[a + " "];
            if (!f) {
                for (b || (b = p(a)), c = b.length; c--;) f = v(b[c]),
                f[R] ? d.push(f) : e.push(f);
                f = X(a, w(e, d))
            }
            return f
        },
        D.pseudos.nth = D.pseudos.eq,
        z.prototype = D.filters = D.pseudos,
        D.setFilters = new z,
        B.sortStable = R.split("").sort(Z).join("") === R,
        J(),
        [0, 0].sort(Z),
        B.detectDuplicates = Y,
        ka.find = c,
        ka.expr = c.selectors,
        ka.expr[":"] = ka.expr.pseudos,
        ka.unique = c.uniqueSort,
        ka.text = c.getText,
        ka.isXMLDoc = c.isXML,
        ka.contains = c.contains
    } (a);
    var za = {};
    ka.Callbacks = function(a) {
        a = "string" == typeof a ? za[a] || d(a) : ka.extend({},
        a);
        var c, e, f, g, h, i, j = [],
        k = !a.once && [],
        l = function(b) {
            for (e = a.memory && b, f = !0, h = i || 0, i = 0, g = j.length, c = !0; j && g > h; h++) if (j[h].apply(b[0], b[1]) === !1 && a.stopOnFalse) {
                e = !1;
                break
            }
            c = !1,
            j && (k ? k.length && l(k.shift()) : e ? j = [] : m.disable())
        },
        m = {
            add: function() {
                if (j) {
                    var b = j.length; !
                    function d(b) {
                        ka.each(b,
                        function(b, c) {
                            var e = ka.type(c);
                            "function" === e ? a.unique && m.has(c) || j.push(c) : c && c.length && "string" !== e && d(c)
                        })
                    } (arguments),
                    c ? g = j.length: e && (i = b, l(e))
                }
                return this
            },
            remove: function() {
                return j && ka.each(arguments,
                function(a, b) {
                    for (var d; (d = ka.inArray(b, j, d)) > -1;) j.splice(d, 1),
                    c && (g >= d && g--, h >= d && h--)
                }),
                this
            },
            has: function(a) {
                return a ? ka.inArray(a, j) > -1 : !(!j || !j.length)
            },
            empty: function() {
                return j = [],
                g = 0,
                this
            },
            disable: function() {
                return j = k = e = b,
                this
            },
            disabled: function() {
                return ! j
            },
            lock: function() {
                return k = b,
                e || m.disable(),
                this
            },
            locked: function() {
                return ! k
            },
            fireWith: function(a, b) {
                return b = b || [],
                b = [a, b.slice ? b.slice() : b],
                !j || f && !k || (c ? k.push(b) : l(b)),
                this
            },
            fire: function() {
                return m.fireWith(this, arguments),
                this
            },
            fired: function() {
                return !! f
            }
        };
        return m
    },
    ka.extend({
        Deferred: function(a) {
            var b = [["resolve", "done", ka.Callbacks("once memory"), "resolved"], ["reject", "fail", ka.Callbacks("once memory"), "rejected"], ["notify", "progress", ka.Callbacks("memory")]],
            c = "pending",
            d = {
                state: function() {
                    return c
                },
                always: function() {
                    return e.done(arguments).fail(arguments),
                    this
                },
                then: function() {
                    var a = arguments;
                    return ka.Deferred(function(c) {
                        ka.each(b,
                        function(b, f) {
                            var g = f[0],
                            h = ka.isFunction(a[b]) && a[b];
                            e[f[1]](function() {
                                var a = h && h.apply(this, arguments);
                                a && ka.isFunction(a.promise) ? a.promise().done(c.resolve).fail(c.reject).progress(c.notify) : c[g + "With"](this === d ? c.promise() : this, h ? [a] : arguments)
                            })
                        }),
                        a = null
                    }).promise()
                },
                promise: function(a) {
                    return null != a ? ka.extend(a, d) : d
                }
            },
            e = {};
            return d.pipe = d.then,
            ka.each(b,
            function(a, f) {
                var g = f[2],
                h = f[3];
                d[f[1]] = g.add,
                h && g.add(function() {
                    c = h
                },
                b[1 ^ a][2].disable, b[2][2].lock),
                e[f[0]] = function() {
                    return e[f[0] + "With"](this === e ? d: this, arguments),
                    this
                },
                e[f[0] + "With"] = g.fireWith
            }),
            d.promise(e),
            a && a.call(e, e),
            e
        },
        when: function(a) {
            var b, c, d, e = 0,
            f = fa.call(arguments),
            g = f.length,
            h = 1 !== g || a && ka.isFunction(a.promise) ? g: 0,
            i = 1 === h ? a: ka.Deferred(),
            j = function(a, c, d) {
                return function(e) {
                    c[a] = this,
                    d[a] = arguments.length > 1 ? fa.call(arguments) : e,
                    d === b ? i.notifyWith(c, d) : --h || i.resolveWith(c, d)
                }
            };
            if (g > 1) for (b = new Array(g), c = new Array(g), d = new Array(g); g > e; e++) f[e] && ka.isFunction(f[e].promise) ? f[e].promise().done(j(e, d, f)).fail(i.reject).progress(j(e, c, b)) : --h;
            return h || i.resolveWith(d, f),
            i.promise()
        }
    }),
    ka.support = function(b) {
        var c, d, e, f, g, h, i, j, k, l = Y.createElement("div");
        if (l.setAttribute("className", "t"), l.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", c = l.getElementsByTagName("*") || [], d = l.getElementsByTagName("a")[0], !d || !d.style || !c.length) return b;
        f = Y.createElement("select"),
        h = f.appendChild(Y.createElement("option")),
        e = l.getElementsByTagName("input")[0],
        d.style.cssText = "top:1px;float:left;opacity:.5",
        b.getSetAttribute = "t" !== l.className,
        b.leadingWhitespace = 3 === l.firstChild.nodeType,
        b.tbody = !l.getElementsByTagName("tbody").length,
        b.htmlSerialize = !!l.getElementsByTagName("link").length,
        b.style = /top/.test(d.getAttribute("style")),
        b.hrefNormalized = "/a" === d.getAttribute("href"),
        b.opacity = /^0.5/.test(d.style.opacity),
        b.cssFloat = !!d.style.cssFloat,
        b.checkOn = !!e.value,
        b.optSelected = h.selected,
        b.enctype = !!Y.createElement("form").enctype,
        b.html5Clone = "<:nav></:nav>" !== Y.createElement("nav").cloneNode(!0).outerHTML,
        b.inlineBlockNeedsLayout = !1,
        b.shrinkWrapBlocks = !1,
        b.pixelPosition = !1,
        b.deleteExpando = !0,
        b.noCloneEvent = !0,
        b.reliableMarginRight = !0,
        b.boxSizingReliable = !0,
        e.checked = !0,
        b.noCloneChecked = e.cloneNode(!0).checked,
        f.disabled = !0,
        b.optDisabled = !h.disabled;
        try {
            delete l.test
        } catch(m) {
            b.deleteExpando = !1
        }
        e = Y.createElement("input"),
        e.setAttribute("value", ""),
        b.input = "" === e.getAttribute("value"),
        e.value = "t",
        e.setAttribute("type", "radio"),
        b.radioValue = "t" === e.value,
        e.setAttribute("checked", "t"),
        e.setAttribute("name", "t"),
        g = Y.createDocumentFragment(),
        g.appendChild(e),
        b.appendChecked = e.checked,
        b.checkClone = g.cloneNode(!0).cloneNode(!0).lastChild.checked,
        l.attachEvent && (l.attachEvent("onclick",
        function() {
            b.noCloneEvent = !1
        }), l.cloneNode(!0).click());
        for (k in {
            submit: !0,
            change: !0,
            focusin: !0
        }) l.setAttribute(i = "on" + k, "t"),
        b[k + "Bubbles"] = i in a || l.attributes[i].expando === !1;
        l.style.backgroundClip = "content-box",
        l.cloneNode(!0).style.backgroundClip = "",
        b.clearCloneStyle = "content-box" === l.style.backgroundClip;
        for (k in ka(b)) break;
        return b.ownLast = "0" !== k,
        ka(function() {
            var c, d, e, f = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
            g = Y.getElementsByTagName("body")[0];
            g && (c = Y.createElement("div"), c.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px", g.appendChild(c).appendChild(l), l.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", e = l.getElementsByTagName("td"), e[0].style.cssText = "padding:0;margin:0;border:0;display:none", j = 0 === e[0].offsetHeight, e[0].style.display = "", e[1].style.display = "none", b.reliableHiddenOffsets = j && 0 === e[0].offsetHeight, l.innerHTML = "", l.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;", ka.swap(g, null != g.style.zoom ? {
                zoom: 1
            }: {},
            function() {
                b.boxSizing = 4 === l.offsetWidth
            }), a.getComputedStyle && (b.pixelPosition = "1%" !== (a.getComputedStyle(l, null) || {}).top, b.boxSizingReliable = "4px" === (a.getComputedStyle(l, null) || {
                width: "4px"
            }).width, d = l.appendChild(Y.createElement("div")), d.style.cssText = l.style.cssText = f, d.style.marginRight = d.style.width = "0", l.style.width = "1px", b.reliableMarginRight = !parseFloat((a.getComputedStyle(d, null) || {}).marginRight)), typeof l.style.zoom !== W && (l.innerHTML = "", l.style.cssText = f + "width:1px;padding:1px;display:inline;zoom:1", b.inlineBlockNeedsLayout = 3 === l.offsetWidth, l.style.display = "block", l.innerHTML = "<div></div>", l.firstChild.style.width = "5px", b.shrinkWrapBlocks = 3 !== l.offsetWidth, b.inlineBlockNeedsLayout && (g.style.zoom = 1)), g.removeChild(c), c = l = e = d = null)
        }),
        c = f = g = h = d = e = null,
        b
    } ({});
    var Aa = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
    Ba = /([A-Z])/g;
    ka.extend({
        cache: {},
        noData: {
            applet: !0,
            embed: !0,
            object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
        },
        hasData: function(a) {
            return a = a.nodeType ? ka.cache[a[ka.expando]] : a[ka.expando],
            !!a && !h(a)
        },
        data: function(a, b, c) {
            return e(a, b, c)
        },
        removeData: function(a, b) {
            return f(a, b)
        },
        _data: function(a, b, c) {
            return e(a, b, c, !0)
        },
        _removeData: function(a, b) {
            return f(a, b, !0)
        },
        acceptData: function(a) {
            if (a.nodeType && 1 !== a.nodeType && 9 !== a.nodeType) return ! 1;
            var b = a.nodeName && ka.noData[a.nodeName.toLowerCase()];
            return ! b || b !== !0 && a.getAttribute("classid") === b
        }
    }),
    ka.fn.extend({
        data: function(a, c) {
            var d, e, f = null,
            h = 0,
            i = this[0];
            if (a === b) {
                if (this.length && (f = ka.data(i), 1 === i.nodeType && !ka._data(i, "parsedAttrs"))) {
                    for (d = i.attributes; h < d.length; h++) e = d[h].name,
                    0 === e.indexOf("data-") && (e = ka.camelCase(e.slice(5)), g(i, e, f[e]));
                    ka._data(i, "parsedAttrs", !0)
                }
                return f
            }
            return "object" == typeof a ? this.each(function() {
                ka.data(this, a)
            }) : arguments.length > 1 ? this.each(function() {
                ka.data(this, a, c)
            }) : i ? g(i, a, ka.data(i, a)) : null
        },
        removeData: function(a) {
            return this.each(function() {
                ka.removeData(this, a)
            })
        }
    }),
    ka.extend({
        queue: function(a, b, c) {
            var d;
            return a ? (b = (b || "fx") + "queue", d = ka._data(a, b), c && (!d || ka.isArray(c) ? d = ka._data(a, b, ka.makeArray(c)) : d.push(c)), d || []) : void 0
        },
        dequeue: function(a, b) {
            b = b || "fx";
            var c = ka.queue(a, b),
            d = c.length,
            e = c.shift(),
            f = ka._queueHooks(a, b),
            g = function() {
                ka.dequeue(a, b)
            };
            "inprogress" === e && (e = c.shift(), d--),
            e && ("fx" === b && c.unshift("inprogress"), delete f.stop, e.call(a, g, f)),
            !d && f && f.empty.fire()
        },
        _queueHooks: function(a, b) {
            var c = b + "queueHooks";
            return ka._data(a, c) || ka._data(a, c, {
                empty: ka.Callbacks("once memory").add(function() {
                    ka._removeData(a, b + "queue"),
                    ka._removeData(a, c)
                })
            })
        }
    }),
    ka.fn.extend({
        queue: function(a, c) {
            var d = 2;
            return "string" != typeof a && (c = a, a = "fx", d--),
            arguments.length < d ? ka.queue(this[0], a) : c === b ? this: this.each(function() {
                var b = ka.queue(this, a, c);
                ka._queueHooks(this, a),
                "fx" === a && "inprogress" !== b[0] && ka.dequeue(this, a)
            })
        },
        dequeue: function(a) {
            return this.each(function() {
                ka.dequeue(this, a)
            })
        },
        delay: function(a, b) {
            return a = ka.fx ? ka.fx.speeds[a] || a: a,
            b = b || "fx",
            this.queue(b,
            function(b, c) {
                var d = setTimeout(b, a);
                c.stop = function() {
                    clearTimeout(d)
                }
            })
        },
        clearQueue: function(a) {
            return this.queue(a || "fx", [])
        },
        promise: function(a, c) {
            var d, e = 1,
            f = ka.Deferred(),
            g = this,
            h = this.length,
            i = function() {--e || f.resolveWith(g, [g])
            };
            for ("string" != typeof a && (c = a, a = b), a = a || "fx"; h--;) d = ka._data(g[h], a + "queueHooks"),
            d && d.empty && (e++, d.empty.add(i));
            return i(),
            f.promise(c)
        }
    });
    var Ca, Da, Ea = /[\t\r\n\f]/g,
    Fa = /\r/g,
    Ga = /^(?:input|select|textarea|button|object)$/i,
    Ha = /^(?:a|area)$/i,
    Ia = /^(?:checked|selected)$/i,
    Ja = ka.support.getSetAttribute,
    Ka = ka.support.input;
    ka.fn.extend({
        attr: function(a, b) {
            return ka.access(this, ka.attr, a, b, arguments.length > 1)
        },
        removeAttr: function(a) {
            return this.each(function() {
                ka.removeAttr(this, a)
            })
        },
        prop: function(a, b) {
            return ka.access(this, ka.prop, a, b, arguments.length > 1)
        },
        removeProp: function(a) {
            return a = ka.propFix[a] || a,
            this.each(function() {
                try {
                    this[a] = b,
                    delete this[a]
                } catch(c) {}
            })
        },
        addClass: function(a) {
            var b, c, d, e, f, g = 0,
            h = this.length,
            i = "string" == typeof a && a;
            if (ka.isFunction(a)) return this.each(function(b) {
                ka(this).addClass(a.call(this, b, this.className))
            });
            if (i) for (b = (a || "").match(ma) || []; h > g; g++) if (c = this[g], d = 1 === c.nodeType && (c.className ? (" " + c.className + " ").replace(Ea, " ") : " ")) {
                for (f = 0; e = b[f++];) d.indexOf(" " + e + " ") < 0 && (d += e + " ");
                c.className = ka.trim(d)
            }
            return this
        },
        removeClass: function(a) {
            var b, c, d, e, f, g = 0,
            h = this.length,
            i = 0 === arguments.length || "string" == typeof a && a;
            if (ka.isFunction(a)) return this.each(function(b) {
                ka(this).removeClass(a.call(this, b, this.className))
            });
            if (i) for (b = (a || "").match(ma) || []; h > g; g++) if (c = this[g], d = 1 === c.nodeType && (c.className ? (" " + c.className + " ").replace(Ea, " ") : "")) {
                for (f = 0; e = b[f++];) for (; d.indexOf(" " + e + " ") >= 0;) d = d.replace(" " + e + " ", " ");
                c.className = a ? ka.trim(d) : ""
            }
            return this
        },
        toggleClass: function(a, b) {
            var c = typeof a,
            d = "boolean" == typeof b;
            return ka.isFunction(a) ? this.each(function(c) {
                ka(this).toggleClass(a.call(this, c, this.className, b), b)
            }) : this.each(function() {
                if ("string" === c) for (var e, f = 0,
                g = ka(this), h = b, i = a.match(ma) || []; e = i[f++];) h = d ? h: !g.hasClass(e),
                g[h ? "addClass": "removeClass"](e);
                else(c === W || "boolean" === c) && (this.className && ka._data(this, "__className__", this.className), this.className = this.className || a === !1 ? "": ka._data(this, "__className__") || "")
            })
        },
        hasClass: function(a) {
            for (var b = " " + a + " ",
            c = 0,
            d = this.length; d > c; c++) if (1 === this[c].nodeType && (" " + this[c].className + " ").replace(Ea, " ").indexOf(b) >= 0) return ! 0;
            return ! 1
        },
        val: function(a) {
            var c, d, e, f = this[0]; {
                if (arguments.length) return e = ka.isFunction(a),
                this.each(function(c) {
                    var f;
                    1 === this.nodeType && (f = e ? a.call(this, c, ka(this).val()) : a, null == f ? f = "": "number" == typeof f ? f += "": ka.isArray(f) && (f = ka.map(f,
                    function(a) {
                        return null == a ? "": a + ""
                    })), d = ka.valHooks[this.type] || ka.valHooks[this.nodeName.toLowerCase()], d && "set" in d && d.set(this, f, "value") !== b || (this.value = f))
                });
                if (f) return d = ka.valHooks[f.type] || ka.valHooks[f.nodeName.toLowerCase()],
                d && "get" in d && (c = d.get(f, "value")) !== b ? c: (c = f.value, "string" == typeof c ? c.replace(Fa, "") : null == c ? "": c)
            }
        }
    }),
    ka.extend({
        valHooks: {
            option: {
                get: function(a) {
                    var b = ka.find.attr(a, "value");
                    return null != b ? b: a.text
                }
            },
            select: {
                get: function(a) {
                    for (var b, c, d = a.options,
                    e = a.selectedIndex,
                    f = "select-one" === a.type || 0 > e,
                    g = f ? null: [], h = f ? e + 1 : d.length, i = 0 > e ? h: f ? e: 0; h > i; i++) if (c = d[i], (c.selected || i === e) && (ka.support.optDisabled ? !c.disabled: null === c.getAttribute("disabled")) && (!c.parentNode.disabled || !ka.nodeName(c.parentNode, "optgroup"))) {
                        if (b = ka(c).val(), f) return b;
                        g.push(b)
                    }
                    return g
                },
                set: function(a, b) {
                    for (var c, d, e = a.options,
                    f = ka.makeArray(b), g = e.length; g--;) d = e[g],
                    (d.selected = ka.inArray(ka(d).val(), f) >= 0) && (c = !0);
                    return c || (a.selectedIndex = -1),
                    f
                }
            }
        },
        attr: function(a, c, d) {
            var e, f, g = a.nodeType;
            if (a && 3 !== g && 8 !== g && 2 !== g) return typeof a.getAttribute === W ? ka.prop(a, c, d) : (1 === g && ka.isXMLDoc(a) || (c = c.toLowerCase(), e = ka.attrHooks[c] || (ka.expr.match.bool.test(c) ? Da: Ca)), d === b ? e && "get" in e && null !== (f = e.get(a, c)) ? f: (f = ka.find.attr(a, c), null == f ? b: f) : null !== d ? e && "set" in e && (f = e.set(a, d, c)) !== b ? f: (a.setAttribute(c, d + ""), d) : void ka.removeAttr(a, c))
        },
        removeAttr: function(a, b) {
            var c, d, e = 0,
            f = b && b.match(ma);
            if (f && 1 === a.nodeType) for (; c = f[e++];) d = ka.propFix[c] || c,
            ka.expr.match.bool.test(c) ? Ka && Ja || !Ia.test(c) ? a[d] = !1 : a[ka.camelCase("default-" + c)] = a[d] = !1 : ka.attr(a, c, ""),
            a.removeAttribute(Ja ? c: d)
        },
        attrHooks: {
            type: {
                set: function(a, b) {
                    if (!ka.support.radioValue && "radio" === b && ka.nodeName(a, "input")) {
                        var c = a.value;
                        return a.setAttribute("type", b),
                        c && (a.value = c),
                        b
                    }
                }
            }
        },
        propFix: {
            "for": "htmlFor",
            "class": "className"
        },
        prop: function(a, c, d) {
            var e, f, g, h = a.nodeType;
            if (a && 3 !== h && 8 !== h && 2 !== h) return g = 1 !== h || !ka.isXMLDoc(a),
            g && (c = ka.propFix[c] || c, f = ka.propHooks[c]),
            d !== b ? f && "set" in f && (e = f.set(a, d, c)) !== b ? e: a[c] = d: f && "get" in f && null !== (e = f.get(a, c)) ? e: a[c]
        },
        propHooks: {
            tabIndex: {
                get: function(a) {
                    var b = ka.find.attr(a, "tabindex");
                    return b ? parseInt(b, 10) : Ga.test(a.nodeName) || Ha.test(a.nodeName) && a.href ? 0 : -1
                }
            }
        }
    }),
    Da = {
        set: function(a, b, c) {
            return b === !1 ? ka.removeAttr(a, c) : Ka && Ja || !Ia.test(c) ? a.setAttribute(!Ja && ka.propFix[c] || c, c) : a[ka.camelCase("default-" + c)] = a[c] = !0,
            c
        }
    },
    ka.each(ka.expr.match.bool.source.match(/\w+/g),
    function(a, c) {
        var d = ka.expr.attrHandle[c] || ka.find.attr;
        ka.expr.attrHandle[c] = Ka && Ja || !Ia.test(c) ?
        function(a, c, e) {
            var f = ka.expr.attrHandle[c],
            g = e ? b: (ka.expr.attrHandle[c] = b) != d(a, c, e) ? c.toLowerCase() : null;
            return ka.expr.attrHandle[c] = f,
            g
        }: function(a, c, d) {
            return d ? b: a[ka.camelCase("default-" + c)] ? c.toLowerCase() : null
        }
    }),
    Ka && Ja || (ka.attrHooks.value = {
        set: function(a, b, c) {
            return ka.nodeName(a, "input") ? void(a.defaultValue = b) : Ca && Ca.set(a, b, c)
        }
    }),
    Ja || (Ca = {
        set: function(a, c, d) {
            var e = a.getAttributeNode(d);
            return e || a.setAttributeNode(e = a.ownerDocument.createAttribute(d)),
            e.value = c += "",
            "value" === d || c === a.getAttribute(d) ? c: b
        }
    },
    ka.expr.attrHandle.id = ka.expr.attrHandle.name = ka.expr.attrHandle.coords = function(a, c, d) {
        var e;
        return d ? b: (e = a.getAttributeNode(c)) && "" !== e.value ? e.value: null
    },
    ka.valHooks.button = {
        get: function(a, c) {
            var d = a.getAttributeNode(c);
            return d && d.specified ? d.value: b
        },
        set: Ca.set
    },
    ka.attrHooks.contenteditable = {
        set: function(a, b, c) {
            Ca.set(a, "" === b ? !1 : b, c)
        }
    },
    ka.each(["width", "height"],
    function(a, b) {
        ka.attrHooks[b] = {
            set: function(a, c) {
                return "" === c ? (a.setAttribute(b, "auto"), c) : void 0
            }
        }
    })),
    ka.support.hrefNormalized || ka.each(["href", "src"],
    function(a, b) {
        ka.propHooks[b] = {
            get: function(a) {
                return a.getAttribute(b, 4)
            }
        }
    }),
    ka.support.style || (ka.attrHooks.style = {
        get: function(a) {
            return a.style.cssText || b
        },
        set: function(a, b) {
            return a.style.cssText = b + ""
        }
    }),
    ka.support.optSelected || (ka.propHooks.selected = {
        get: function(a) {
            var b = a.parentNode;
            return b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex),
            null
        }
    }),
    ka.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"],
    function() {
        ka.propFix[this.toLowerCase()] = this
    }),
    ka.support.enctype || (ka.propFix.enctype = "encoding"),
    ka.each(["radio", "checkbox"],
    function() {
        ka.valHooks[this] = {
            set: function(a, b) {
                return ka.isArray(b) ? a.checked = ka.inArray(ka(a).val(), b) >= 0 : void 0
            }
        },
        ka.support.checkOn || (ka.valHooks[this].get = function(a) {
            return null === a.getAttribute("value") ? "on": a.value
        })
    });
    var La = /^(?:input|select|textarea)$/i,
    Ma = /^key/,
    Na = /^(?:mouse|contextmenu)|click/,
    Oa = /^(?:focusinfocus|focusoutblur)$/,
    Pa = /^([^.]*)(?:\.(.+)|)$/;
    ka.event = {
        global: {},
        add: function(a, c, d, e, f) {
            var g, h, i, j, k, l, m, n, o, p, q, r = ka._data(a);
            if (r) {
                for (d.handler && (j = d, d = j.handler, f = j.selector), d.guid || (d.guid = ka.guid++), (h = r.events) || (h = r.events = {}), (l = r.handle) || (l = r.handle = function(a) {
                    return typeof ka === W || a && ka.event.triggered === a.type ? b: ka.event.dispatch.apply(l.elem, arguments)
                },
                l.elem = a), c = (c || "").match(ma) || [""], i = c.length; i--;) g = Pa.exec(c[i]) || [],
                o = q = g[1],
                p = (g[2] || "").split(".").sort(),
                o && (k = ka.event.special[o] || {},
                o = (f ? k.delegateType: k.bindType) || o, k = ka.event.special[o] || {},
                m = ka.extend({
                    type: o,
                    origType: q,
                    data: e,
                    handler: d,
                    guid: d.guid,
                    selector: f,
                    needsContext: f && ka.expr.match.needsContext.test(f),
                    namespace: p.join(".")
                },
                j), (n = h[o]) || (n = h[o] = [], n.delegateCount = 0, k.setup && k.setup.call(a, e, p, l) !== !1 || (a.addEventListener ? a.addEventListener(o, l, !1) : a.attachEvent && a.attachEvent("on" + o, l))), k.add && (k.add.call(a, m), m.handler.guid || (m.handler.guid = d.guid)), f ? n.splice(n.delegateCount++, 0, m) : n.push(m), ka.event.global[o] = !0);
                a = null
            }
        },
        remove: function(a, b, c, d, e) {
            var f, g, h, i, j, k, l, m, n, o, p, q = ka.hasData(a) && ka._data(a);
            if (q && (k = q.events)) {
                for (b = (b || "").match(ma) || [""], j = b.length; j--;) if (h = Pa.exec(b[j]) || [], n = p = h[1], o = (h[2] || "").split(".").sort(), n) {
                    for (l = ka.event.special[n] || {},
                    n = (d ? l.delegateType: l.bindType) || n, m = k[n] || [], h = h[2] && new RegExp("(^|\\.)" + o.join("\\.(?:.*\\.|)") + "(\\.|$)"), i = f = m.length; f--;) g = m[f],
                    !e && p !== g.origType || c && c.guid !== g.guid || h && !h.test(g.namespace) || d && d !== g.selector && ("**" !== d || !g.selector) || (m.splice(f, 1), g.selector && m.delegateCount--, l.remove && l.remove.call(a, g));
                    i && !m.length && (l.teardown && l.teardown.call(a, o, q.handle) !== !1 || ka.removeEvent(a, n, q.handle), delete k[n])
                } else for (n in k) ka.event.remove(a, n + b[j], c, d, !0);
                ka.isEmptyObject(k) && (delete q.handle, ka._removeData(a, "events"))
            }
        },
        trigger: function(c, d, e, f) {
            var g, h, i, j, k, l, m, n = [e || Y],
            o = ia.call(c, "type") ? c.type: c,
            p = ia.call(c, "namespace") ? c.namespace.split(".") : [];
            if (i = l = e = e || Y, 3 !== e.nodeType && 8 !== e.nodeType && !Oa.test(o + ka.event.triggered) && (o.indexOf(".") >= 0 && (p = o.split("."), o = p.shift(), p.sort()), h = o.indexOf(":") < 0 && "on" + o, c = c[ka.expando] ? c: new ka.Event(o, "object" == typeof c && c), c.isTrigger = f ? 2 : 3, c.namespace = p.join("."), c.namespace_re = c.namespace ? new RegExp("(^|\\.)" + p.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, c.result = b, c.target || (c.target = e), d = null == d ? [c] : ka.makeArray(d, [c]), k = ka.event.special[o] || {},
            f || !k.trigger || k.trigger.apply(e, d) !== !1)) {
                if (!f && !k.noBubble && !ka.isWindow(e)) {
                    for (j = k.delegateType || o, Oa.test(j + o) || (i = i.parentNode); i; i = i.parentNode) n.push(i),
                    l = i;
                    l === (e.ownerDocument || Y) && n.push(l.defaultView || l.parentWindow || a)
                }
                for (m = 0; (i = n[m++]) && !c.isPropagationStopped();) c.type = m > 1 ? j: k.bindType || o,
                g = (ka._data(i, "events") || {})[c.type] && ka._data(i, "handle"),
                g && g.apply(i, d),
                g = h && i[h],
                g && ka.acceptData(i) && g.apply && g.apply(i, d) === !1 && c.preventDefault();
                if (c.type = o, !f && !c.isDefaultPrevented() && (!k._default || k._default.apply(n.pop(), d) === !1) && ka.acceptData(e) && h && e[o] && !ka.isWindow(e)) {
                    l = e[h],
                    l && (e[h] = null),
                    ka.event.triggered = o;
                    try {
                        e[o]()
                    } catch(q) {}
                    ka.event.triggered = b,
                    l && (e[h] = l)
                }
                return c.result
            }
        },
        dispatch: function(a) {
            a = ka.event.fix(a);
            var c, d, e, f, g, h = [],
            i = fa.call(arguments),
            j = (ka._data(this, "events") || {})[a.type] || [],
            k = ka.event.special[a.type] || {};
            if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) {
                for (h = ka.event.handlers.call(this, a, j), c = 0; (f = h[c++]) && !a.isPropagationStopped();) for (a.currentTarget = f.elem, g = 0; (e = f.handlers[g++]) && !a.isImmediatePropagationStopped();)(!a.namespace_re || a.namespace_re.test(e.namespace)) && (a.handleObj = e, a.data = e.data, d = ((ka.event.special[e.origType] || {}).handle || e.handler).apply(f.elem, i), d !== b && (a.result = d) === !1 && (a.preventDefault(), a.stopPropagation()));
                return k.postDispatch && k.postDispatch.call(this, a),
                a.result
            }
        },
        handlers: function(a, c) {
            var d, e, f, g, h = [],
            i = c.delegateCount,
            j = a.target;
            if (i && j.nodeType && (!a.button || "click" !== a.type)) for (; j != this; j = j.parentNode || this) if (1 === j.nodeType && (j.disabled !== !0 || "click" !== a.type)) {
                for (f = [], g = 0; i > g; g++) e = c[g],
                d = e.selector + " ",
                f[d] === b && (f[d] = e.needsContext ? ka(d, this).index(j) >= 0 : ka.find(d, this, null, [j]).length),
                f[d] && f.push(e);
                f.length && h.push({
                    elem: j,
                    handlers: f
                })
            }
            return i < c.length && h.push({
                elem: this,
                handlers: c.slice(i)
            }),
            h
        },
        fix: function(a) {
            if (a[ka.expando]) return a;
            var b, c, d, e = a.type,
            f = a,
            g = this.fixHooks[e];
            for (g || (this.fixHooks[e] = g = Na.test(e) ? this.mouseHooks: Ma.test(e) ? this.keyHooks: {}), d = g.props ? this.props.concat(g.props) : this.props, a = new ka.Event(f), b = d.length; b--;) c = d[b],
            a[c] = f[c];
            return a.target || (a.target = f.srcElement || Y),
            3 === a.target.nodeType && (a.target = a.target.parentNode),
            a.metaKey = !!a.metaKey,
            g.filter ? g.filter(a, f) : a
        },
        props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
        fixHooks: {},
        keyHooks: {
            props: "char charCode key keyCode".split(" "),
            filter: function(a, b) {
                return null == a.which && (a.which = null != b.charCode ? b.charCode: b.keyCode),
                a
            }
        },
        mouseHooks: {
            props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
            filter: function(a, c) {
                var d, e, f, g = c.button,
                h = c.fromElement;
                return null == a.pageX && null != c.clientX && (e = a.target.ownerDocument || Y, f = e.documentElement, d = e.body, a.pageX = c.clientX + (f && f.scrollLeft || d && d.scrollLeft || 0) - (f && f.clientLeft || d && d.clientLeft || 0), a.pageY = c.clientY + (f && f.scrollTop || d && d.scrollTop || 0) - (f && f.clientTop || d && d.clientTop || 0)),
                !a.relatedTarget && h && (a.relatedTarget = h === a.target ? c.toElement: h),
                a.which || g === b || (a.which = 1 & g ? 1 : 2 & g ? 3 : 4 & g ? 2 : 0),
                a
            }
        },
        special: {
            load: {
                noBubble: !0
            },
            focus: {
                trigger: function() {
                    if (this !== k() && this.focus) try {
                        return this.focus(),
                        !1
                    } catch(a) {}
                },
                delegateType: "focusin"
            },
            blur: {
                trigger: function() {
                    return this === k() && this.blur ? (this.blur(), !1) : void 0
                },
                delegateType: "focusout"
            },
            click: {
                trigger: function() {
                    return ka.nodeName(this, "input") && "checkbox" === this.type && this.click ? (this.click(), !1) : void 0
                },
                _default: function(a) {
                    return ka.nodeName(a.target, "a")
                }
            },
            beforeunload: {
                postDispatch: function(a) {
                    a.result !== b && (a.originalEvent.returnValue = a.result)
                }
            }
        },
        simulate: function(a, b, c, d) {
            var e = ka.extend(new ka.Event, c, {
                type: a,
                isSimulated: !0,
                originalEvent: {}
            });
            d ? ka.event.trigger(e, null, b) : ka.event.dispatch.call(b, e),
            e.isDefaultPrevented() && c.preventDefault()
        }
    },
    ka.removeEvent = Y.removeEventListener ?
    function(a, b, c) {
        a.removeEventListener && a.removeEventListener(b, c, !1)
    }: function(a, b, c) {
        var d = "on" + b;
        a.detachEvent && (typeof a[d] === W && (a[d] = null), a.detachEvent(d, c))
    },
    ka.Event = function(a, b) {
        return this instanceof ka.Event ? (a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || a.returnValue === !1 || a.getPreventDefault && a.getPreventDefault() ? i: j) : this.type = a, b && ka.extend(this, b), this.timeStamp = a && a.timeStamp || ka.now(), void(this[ka.expando] = !0)) : new ka.Event(a, b)
    },
    ka.Event.prototype = {
        isDefaultPrevented: j,
        isPropagationStopped: j,
        isImmediatePropagationStopped: j,
        preventDefault: function() {
            var a = this.originalEvent;
            this.isDefaultPrevented = i,
            a && (a.preventDefault ? a.preventDefault() : a.returnValue = !1)
        },
        stopPropagation: function() {
            var a = this.originalEvent;
            this.isPropagationStopped = i,
            a && (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0)
        },
        stopImmediatePropagation: function() {
            this.isImmediatePropagationStopped = i,
            this.stopPropagation()
        }
    },
    ka.each({
        mouseenter: "mouseover",
        mouseleave: "mouseout"
    },
    function(a, b) {
        ka.event.special[a] = {
            delegateType: b,
            bindType: b,
            handle: function(a) {
                var c, d = this,
                e = a.relatedTarget,
                f = a.handleObj;
                return (!e || e !== d && !ka.contains(d, e)) && (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b),
                c
            }
        }
    }),
    ka.support.submitBubbles || (ka.event.special.submit = {
        setup: function() {
            return ka.nodeName(this, "form") ? !1 : void ka.event.add(this, "click._submit keypress._submit",
            function(a) {
                var c = a.target,
                d = ka.nodeName(c, "input") || ka.nodeName(c, "button") ? c.form: b;
                d && !ka._data(d, "submitBubbles") && (ka.event.add(d, "submit._submit",
                function(a) {
                    a._submit_bubble = !0
                }), ka._data(d, "submitBubbles", !0))
            })
        },
        postDispatch: function(a) {
            a._submit_bubble && (delete a._submit_bubble, this.parentNode && !a.isTrigger && ka.event.simulate("submit", this.parentNode, a, !0))
        },
        teardown: function() {
            return ka.nodeName(this, "form") ? !1 : void ka.event.remove(this, "._submit")
        }
    }),
    ka.support.changeBubbles || (ka.event.special.change = {
        setup: function() {
            return La.test(this.nodeName) ? (("checkbox" === this.type || "radio" === this.type) && (ka.event.add(this, "propertychange._change",
            function(a) {
                "checked" === a.originalEvent.propertyName && (this._just_changed = !0)
            }), ka.event.add(this, "click._change",
            function(a) {
                this._just_changed && !a.isTrigger && (this._just_changed = !1),
                ka.event.simulate("change", this, a, !0)
            })), !1) : void ka.event.add(this, "beforeactivate._change",
            function(a) {
                var b = a.target;
                La.test(b.nodeName) && !ka._data(b, "changeBubbles") && (ka.event.add(b, "change._change",
                function(a) { ! this.parentNode || a.isSimulated || a.isTrigger || ka.event.simulate("change", this.parentNode, a, !0)
                }), ka._data(b, "changeBubbles", !0))
            })
        },
        handle: function(a) {
            var b = a.target;
            return this !== b || a.isSimulated || a.isTrigger || "radio" !== b.type && "checkbox" !== b.type ? a.handleObj.handler.apply(this, arguments) : void 0
        },
        teardown: function() {
            return ka.event.remove(this, "._change"),
            !La.test(this.nodeName)
        }
    }),
    ka.support.focusinBubbles || ka.each({
        focus: "focusin",
        blur: "focusout"
    },
    function(a, b) {
        var c = 0,
        d = function(a) {
            ka.event.simulate(b, a.target, ka.event.fix(a), !0)
        };
        ka.event.special[b] = {
            setup: function() {
                0 === c++&&Y.addEventListener(a, d, !0)
            },
            teardown: function() {
                0 === --c && Y.removeEventListener(a, d, !0)
            }
        }
    }),
    ka.fn.extend({
        on: function(a, c, d, e, f) {
            var g, h;
            if ("object" == typeof a) {
                "string" != typeof c && (d = d || c, c = b);
                for (g in a) this.on(g, c, d, a[g], f);
                return this
            }
            if (null == d && null == e ? (e = c, d = c = b) : null == e && ("string" == typeof c ? (e = d, d = b) : (e = d, d = c, c = b)), e === !1) e = j;
            else if (!e) return this;
            return 1 === f && (h = e, e = function(a) {
                return ka().off(a),
                h.apply(this, arguments)
            },
            e.guid = h.guid || (h.guid = ka.guid++)),
            this.each(function() {
                ka.event.add(this, a, e, d, c)
            })
        },
        one: function(a, b, c, d) {
            return this.on(a, b, c, d, 1)
        },
        off: function(a, c, d) {
            var e, f;
            if (a && a.preventDefault && a.handleObj) return e = a.handleObj,
            ka(a.delegateTarget).off(e.namespace ? e.origType + "." + e.namespace: e.origType, e.selector, e.handler),
            this;
            if ("object" == typeof a) {
                for (f in a) this.off(f, c, a[f]);
                return this
            }
            return (c === !1 || "function" == typeof c) && (d = c, c = b),
            d === !1 && (d = j),
            this.each(function() {
                ka.event.remove(this, a, d, c)
            })
        },
        trigger: function(a, b) {
            return this.each(function() {
                ka.event.trigger(a, b, this)
            })
        },
        triggerHandler: function(a, b) {
            var c = this[0];
            return c ? ka.event.trigger(a, b, c, !0) : void 0
        }
    });
    var Qa = /^.[^:#\[\.,]*$/,
    Ra = /^(?:parents|prev(?:Until|All))/,
    Sa = ka.expr.match.needsContext,
    Ta = {
        children: !0,
        contents: !0,
        next: !0,
        prev: !0
    };
    ka.fn.extend({
        find: function(a) {
            var b, c = [],
            d = this,
            e = d.length;
            if ("string" != typeof a) return this.pushStack(ka(a).filter(function() {
                for (b = 0; e > b; b++) if (ka.contains(d[b], this)) return ! 0
            }));
            for (b = 0; e > b; b++) ka.find(a, d[b], c);
            return c = this.pushStack(e > 1 ? ka.unique(c) : c),
            c.selector = this.selector ? this.selector + " " + a: a,
            c
        },
        has: function(a) {
            var b, c = ka(a, this),
            d = c.length;
            return this.filter(function() {
                for (b = 0; d > b; b++) if (ka.contains(this, c[b])) return ! 0
            })
        },
        not: function(a) {
            return this.pushStack(m(this, a || [], !0))
        },
        filter: function(a) {
            return this.pushStack(m(this, a || [], !1))
        },
        is: function(a) {
            return !! m(this, "string" == typeof a && Sa.test(a) ? ka(a) : a || [], !1).length
        },
        closest: function(a, b) {
            for (var c, d = 0,
            e = this.length,
            f = [], g = Sa.test(a) || "string" != typeof a ? ka(a, b || this.context) : 0; e > d; d++) for (c = this[d]; c && c !== b; c = c.parentNode) if (c.nodeType < 11 && (g ? g.index(c) > -1 : 1 === c.nodeType && ka.find.matchesSelector(c, a))) {
                c = f.push(c);
                break
            }
            return this.pushStack(f.length > 1 ? ka.unique(f) : f)
        },
        index: function(a) {
            return a ? "string" == typeof a ? ka.inArray(this[0], ka(a)) : ka.inArray(a.jquery ? a[0] : a, this) : this[0] && this[0].parentNode ? this.first().prevAll().length: -1
        },
        add: function(a, b) {
            var c = "string" == typeof a ? ka(a, b) : ka.makeArray(a && a.nodeType ? [a] : a),
            d = ka.merge(this.get(), c);
            return this.pushStack(ka.unique(d))
        },
        addBack: function(a) {
            return this.add(null == a ? this.prevObject: this.prevObject.filter(a))
        }
    }),
    ka.each({
        parent: function(a) {
            var b = a.parentNode;
            return b && 11 !== b.nodeType ? b: null;
        },
        parents: function(a) {
            return ka.dir(a, "parentNode")
        },
        parentsUntil: function(a, b, c) {
            return ka.dir(a, "parentNode", c)
        },
        next: function(a) {
            return l(a, "nextSibling")
        },
        prev: function(a) {
            return l(a, "previousSibling")
        },
        nextAll: function(a) {
            return ka.dir(a, "nextSibling")
        },
        prevAll: function(a) {
            return ka.dir(a, "previousSibling")
        },
        nextUntil: function(a, b, c) {
            return ka.dir(a, "nextSibling", c)
        },
        prevUntil: function(a, b, c) {
            return ka.dir(a, "previousSibling", c)
        },
        siblings: function(a) {
            return ka.sibling((a.parentNode || {}).firstChild, a)
        },
        children: function(a) {
            return ka.sibling(a.firstChild)
        },
        contents: function(a) {
            return ka.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document: ka.merge([], a.childNodes)
        }
    },
    function(a, b) {
        ka.fn[a] = function(c, d) {
            var e = ka.map(this, b, c);
            return "Until" !== a.slice( - 5) && (d = c),
            d && "string" == typeof d && (e = ka.filter(d, e)),
            this.length > 1 && (Ta[a] || (e = ka.unique(e)), Ra.test(a) && (e = e.reverse())),
            this.pushStack(e)
        }
    }),
    ka.extend({
        filter: function(a, b, c) {
            var d = b[0];
            return c && (a = ":not(" + a + ")"),
            1 === b.length && 1 === d.nodeType ? ka.find.matchesSelector(d, a) ? [d] : [] : ka.find.matches(a, ka.grep(b,
            function(a) {
                return 1 === a.nodeType
            }))
        },
        dir: function(a, c, d) {
            for (var e = [], f = a[c]; f && 9 !== f.nodeType && (d === b || 1 !== f.nodeType || !ka(f).is(d));) 1 === f.nodeType && e.push(f),
            f = f[c];
            return e
        },
        sibling: function(a, b) {
            for (var c = []; a; a = a.nextSibling) 1 === a.nodeType && a !== b && c.push(a);
            return c
        }
    });
    var Ua = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
    Va = / jQuery\d+="(?:null|\d+)"/g,
    Wa = new RegExp("<(?:" + Ua + ")[\\s/>]", "i"),
    Xa = /^\s+/,
    Ya = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
    Za = /<([\w:]+)/,
    $a = /<tbody/i,
    _a = /<|&#?\w+;/,
    ab = /<(?:script|style|link)/i,
    bb = /^(?:checkbox|radio)$/i,
    cb = /checked\s*(?:[^=]|=\s*.checked.)/i,
    db = /^$|\/(?:java|ecma)script/i,
    eb = /^true\/(.*)/,
    fb = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
    gb = {
        option: [1, "<select multiple='multiple'>", "</select>"],
        legend: [1, "<fieldset>", "</fieldset>"],
        area: [1, "<map>", "</map>"],
        param: [1, "<object>", "</object>"],
        thead: [1, "<table>", "</table>"],
        tr: [2, "<table><tbody>", "</tbody></table>"],
        col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
        td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
        _default: ka.support.htmlSerialize ? [0, "", ""] : [1, "X<div>", "</div>"]
    },
    hb = n(Y),
    ib = hb.appendChild(Y.createElement("div"));
    gb.optgroup = gb.option,
    gb.tbody = gb.tfoot = gb.colgroup = gb.caption = gb.thead,
    gb.th = gb.td,
    ka.fn.extend({
        text: function(a) {
            return ka.access(this,
            function(a) {
                return a === b ? ka.text(this) : this.empty().append((this[0] && this[0].ownerDocument || Y).createTextNode(a))
            },
            null, a, arguments.length)
        },
        append: function() {
            return this.domManip(arguments,
            function(a) {
                if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                    var b = o(this, a);
                    b.appendChild(a)
                }
            })
        },
        prepend: function() {
            return this.domManip(arguments,
            function(a) {
                if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
                    var b = o(this, a);
                    b.insertBefore(a, b.firstChild)
                }
            })
        },
        before: function() {
            return this.domManip(arguments,
            function(a) {
                this.parentNode && this.parentNode.insertBefore(a, this)
            })
        },
        after: function() {
            return this.domManip(arguments,
            function(a) {
                this.parentNode && this.parentNode.insertBefore(a, this.nextSibling)
            })
        },
        remove: function(a, b) {
            for (var c, d = a ? ka.filter(a, this) : this, e = 0; null != (c = d[e]); e++) b || 1 !== c.nodeType || ka.cleanData(u(c)),
            c.parentNode && (b && ka.contains(c.ownerDocument, c) && r(u(c, "script")), c.parentNode.removeChild(c));
            return this
        },
        empty: function() {
            for (var a, b = 0; null != (a = this[b]); b++) {
                for (1 === a.nodeType && ka.cleanData(u(a, !1)); a.firstChild;) a.removeChild(a.firstChild);
                a.options && ka.nodeName(a, "select") && (a.options.length = 0)
            }
            return this
        },
        clone: function(a, b) {
            return a = null == a ? !1 : a,
            b = null == b ? a: b,
            this.map(function() {
                return ka.clone(this, a, b)
            })
        },
        html: function(a) {
            return ka.access(this,
            function(a) {
                var c = this[0] || {},
                d = 0,
                e = this.length;
                if (a === b) return 1 === c.nodeType ? c.innerHTML.replace(Va, "") : b;
                if ("string" == typeof a && !ab.test(a) && (ka.support.htmlSerialize || !Wa.test(a)) && (ka.support.leadingWhitespace || !Xa.test(a)) && !gb[(Za.exec(a) || ["", ""])[1].toLowerCase()]) {
                    a = a.replace(Ya, "<$1></$2>");
                    try {
                        for (; e > d; d++) c = this[d] || {},
                        1 === c.nodeType && (ka.cleanData(u(c, !1)), c.innerHTML = a);
                        c = 0
                    } catch(f) {}
                }
                c && this.empty().append(a)
            },
            null, a, arguments.length)
        },
        replaceWith: function() {
            var a = ka.map(this,
            function(a) {
                return [a.nextSibling, a.parentNode]
            }),
            b = 0;
            return this.domManip(arguments,
            function(c) {
                var d = a[b++],
                e = a[b++];
                e && (d && d.parentNode !== e && (d = this.nextSibling), ka(this).remove(), e.insertBefore(c, d))
            },
            !0),
            b ? this: this.remove()
        },
        detach: function(a) {
            return this.remove(a, !0)
        },
        domManip: function(a, b, c) {
            a = da.apply([], a);
            var d, e, f, g, h, i, j = 0,
            k = this.length,
            l = this,
            m = k - 1,
            n = a[0],
            o = ka.isFunction(n);
            if (o || !(1 >= k || "string" != typeof n || ka.support.checkClone) && cb.test(n)) return this.each(function(d) {
                var e = l.eq(d);
                o && (a[0] = n.call(this, d, e.html())),
                e.domManip(a, b, c)
            });
            if (k && (i = ka.buildFragment(a, this[0].ownerDocument, !1, !c && this), d = i.firstChild, 1 === i.childNodes.length && (i = d), d)) {
                for (g = ka.map(u(i, "script"), p), f = g.length; k > j; j++) e = i,
                j !== m && (e = ka.clone(e, !0, !0), f && ka.merge(g, u(e, "script"))),
                b.call(this[j], e, j);
                if (f) for (h = g[g.length - 1].ownerDocument, ka.map(g, q), j = 0; f > j; j++) e = g[j],
                db.test(e.type || "") && !ka._data(e, "globalEval") && ka.contains(h, e) && (e.src ? ka._evalUrl(e.src) : ka.globalEval((e.text || e.textContent || e.innerHTML || "").replace(fb, "")));
                i = d = null
            }
            return this
        }
    }),
    ka.each({
        appendTo: "append",
        prependTo: "prepend",
        insertBefore: "before",
        insertAfter: "after",
        replaceAll: "replaceWith"
    },
    function(a, b) {
        ka.fn[a] = function(a) {
            for (var c, d = 0,
            e = [], f = ka(a), g = f.length - 1; g >= d; d++) c = d === g ? this: this.clone(!0),
            ka(f[d])[b](c),
            ea.apply(e, c.get());
            return this.pushStack(e)
        }
    }),
    ka.extend({
        clone: function(a, b, c) {
            var d, e, f, g, h, i = ka.contains(a.ownerDocument, a);
            if (ka.support.html5Clone || ka.isXMLDoc(a) || !Wa.test("<" + a.nodeName + ">") ? f = a.cloneNode(!0) : (ib.innerHTML = a.outerHTML, ib.removeChild(f = ib.firstChild)), !(ka.support.noCloneEvent && ka.support.noCloneChecked || 1 !== a.nodeType && 11 !== a.nodeType || ka.isXMLDoc(a))) for (d = u(f), h = u(a), g = 0; null != (e = h[g]); ++g) d[g] && t(e, d[g]);
            if (b) if (c) for (h = h || u(a), d = d || u(f), g = 0; null != (e = h[g]); g++) s(e, d[g]);
            else s(a, f);
            return d = u(f, "script"),
            d.length > 0 && r(d, !i && u(a, "script")),
            d = h = e = null,
            f
        },
        buildFragment: function(a, b, c, d) {
            for (var e, f, g, h, i, j, k, l = a.length,
            m = n(b), o = [], p = 0; l > p; p++) if (f = a[p], f || 0 === f) if ("object" === ka.type(f)) ka.merge(o, f.nodeType ? [f] : f);
            else if (_a.test(f)) {
                for (h = h || m.appendChild(b.createElement("div")), i = (Za.exec(f) || ["", ""])[1].toLowerCase(), k = gb[i] || gb._default, h.innerHTML = k[1] + f.replace(Ya, "<$1></$2>") + k[2], e = k[0]; e--;) h = h.lastChild;
                if (!ka.support.leadingWhitespace && Xa.test(f) && o.push(b.createTextNode(Xa.exec(f)[0])), !ka.support.tbody) for (f = "table" !== i || $a.test(f) ? "<table>" !== k[1] || $a.test(f) ? 0 : h: h.firstChild, e = f && f.childNodes.length; e--;) ka.nodeName(j = f.childNodes[e], "tbody") && !j.childNodes.length && f.removeChild(j);
                for (ka.merge(o, h.childNodes), h.textContent = ""; h.firstChild;) h.removeChild(h.firstChild);
                h = m.lastChild
            } else o.push(b.createTextNode(f));
            for (h && m.removeChild(h), ka.support.appendChecked || ka.grep(u(o, "input"), v), p = 0; f = o[p++];) if ((!d || -1 === ka.inArray(f, d)) && (g = ka.contains(f.ownerDocument, f), h = u(m.appendChild(f), "script"), g && r(h), c)) for (e = 0; f = h[e++];) db.test(f.type || "") && c.push(f);
            return h = null,
            m
        },
        cleanData: function(a, b) {
            for (var c, d, e, f, g = 0,
            h = ka.expando,
            i = ka.cache,
            j = ka.support.deleteExpando,
            k = ka.event.special; null != (c = a[g]); g++) if ((b || ka.acceptData(c)) && (e = c[h], f = e && i[e])) {
                if (f.events) for (d in f.events) k[d] ? ka.event.remove(c, d) : ka.removeEvent(c, d, f.handle);
                i[e] && (delete i[e], j ? delete c[h] : typeof c.removeAttribute !== W ? c.removeAttribute(h) : c[h] = null, ba.push(e))
            }
        },
        _evalUrl: function(a) {
            return ka.ajax({
                url: a,
                type: "GET",
                dataType: "script",
                async: !1,
                global: !1,
                "throws": !0
            })
        }
    }),
    ka.fn.extend({
        wrapAll: function(a) {
            if (ka.isFunction(a)) return this.each(function(b) {
                ka(this).wrapAll(a.call(this, b))
            });
            if (this[0]) {
                var b = ka(a, this[0].ownerDocument).eq(0).clone(!0);
                this[0].parentNode && b.insertBefore(this[0]),
                b.map(function() {
                    for (var a = this; a.firstChild && 1 === a.firstChild.nodeType;) a = a.firstChild;
                    return a
                }).append(this)
            }
            return this
        },
        wrapInner: function(a) {
            return ka.isFunction(a) ? this.each(function(b) {
                ka(this).wrapInner(a.call(this, b))
            }) : this.each(function() {
                var b = ka(this),
                c = b.contents();
                c.length ? c.wrapAll(a) : b.append(a)
            })
        },
        wrap: function(a) {
            var b = ka.isFunction(a);
            return this.each(function(c) {
                ka(this).wrapAll(b ? a.call(this, c) : a)
            })
        },
        unwrap: function() {
            return this.parent().each(function() {
                ka.nodeName(this, "body") || ka(this).replaceWith(this.childNodes)
            }).end()
        }
    });
    var jb, kb, lb, mb = /alpha\([^)]*\)/i,
    nb = /opacity\s*=\s*([^)]*)/,
    ob = /^(top|right|bottom|left)$/,
    pb = /^(none|table(?!-c[ea]).+)/,
    qb = /^margin/,
    rb = new RegExp("^(" + la + ")(.*)$", "i"),
    sb = new RegExp("^(" + la + ")(?!px)[a-z%]+$", "i"),
    tb = new RegExp("^([+-])=(" + la + ")", "i"),
    ub = {
        BODY: "block"
    },
    vb = {
        position: "absolute",
        visibility: "hidden",
        display: "block"
    },
    wb = {
        letterSpacing: 0,
        fontWeight: 400
    },
    xb = ["Top", "Right", "Bottom", "Left"],
    yb = ["Webkit", "O", "Moz", "ms"];
    ka.fn.extend({
        css: function(a, c) {
            return ka.access(this,
            function(a, c, d) {
                var e, f, g = {},
                h = 0;
                if (ka.isArray(c)) {
                    for (f = kb(a), e = c.length; e > h; h++) g[c[h]] = ka.css(a, c[h], !1, f);
                    return g
                }
                return d !== b ? ka.style(a, c, d) : ka.css(a, c)
            },
            a, c, arguments.length > 1)
        },
        show: function() {
            return y(this, !0)
        },
        hide: function() {
            return y(this)
        },
        toggle: function(a) {
            var b = "boolean" == typeof a;
            return this.each(function() { (b ? a: x(this)) ? ka(this).show() : ka(this).hide()
            })
        }
    }),
    ka.extend({
        cssHooks: {
            opacity: {
                get: function(a, b) {
                    if (b) {
                        var c = lb(a, "opacity");
                        return "" === c ? "1": c
                    }
                }
            }
        },
        cssNumber: {
            columnCount: !0,
            fillOpacity: !0,
            fontWeight: !0,
            lineHeight: !0,
            opacity: !0,
            orphans: !0,
            widows: !0,
            zIndex: !0,
            zoom: !0
        },
        cssProps: {
            "float": ka.support.cssFloat ? "cssFloat": "styleFloat"
        },
        style: function(a, c, d, e) {
            if (a && 3 !== a.nodeType && 8 !== a.nodeType && a.style) {
                var f, g, h, i = ka.camelCase(c),
                j = a.style;
                if (c = ka.cssProps[i] || (ka.cssProps[i] = w(j, i)), h = ka.cssHooks[c] || ka.cssHooks[i], d === b) return h && "get" in h && (f = h.get(a, !1, e)) !== b ? f: j[c];
                if (g = typeof d, "string" === g && (f = tb.exec(d)) && (d = (f[1] + 1) * f[2] + parseFloat(ka.css(a, c)), g = "number"), !(null == d || "number" === g && isNaN(d) || ("number" !== g || ka.cssNumber[i] || (d += "px"), ka.support.clearCloneStyle || "" !== d || 0 !== c.indexOf("background") || (j[c] = "inherit"), h && "set" in h && (d = h.set(a, d, e)) === b))) try {
                    j[c] = d
                } catch(k) {}
            }
        },
        css: function(a, c, d, e) {
            var f, g, h, i = ka.camelCase(c);
            return c = ka.cssProps[i] || (ka.cssProps[i] = w(a.style, i)),
            h = ka.cssHooks[c] || ka.cssHooks[i],
            h && "get" in h && (g = h.get(a, !0, d)),
            g === b && (g = lb(a, c, e)),
            "normal" === g && c in wb && (g = wb[c]),
            "" === d || d ? (f = parseFloat(g), d === !0 || ka.isNumeric(f) ? f || 0 : g) : g
        }
    }),
    a.getComputedStyle ? (kb = function(b) {
        return a.getComputedStyle(b, null)
    },
    lb = function(a, c, d) {
        var e, f, g, h = d || kb(a),
        i = h ? h.getPropertyValue(c) || h[c] : b,
        j = a.style;
        return h && ("" !== i || ka.contains(a.ownerDocument, a) || (i = ka.style(a, c)), sb.test(i) && qb.test(c) && (e = j.width, f = j.minWidth, g = j.maxWidth, j.minWidth = j.maxWidth = j.width = i, i = h.width, j.width = e, j.minWidth = f, j.maxWidth = g)),
        i
    }) : Y.documentElement.currentStyle && (kb = function(a) {
        return a.currentStyle
    },
    lb = function(a, c, d) {
        var e, f, g, h = d || kb(a),
        i = h ? h[c] : b,
        j = a.style;
        return null == i && j && j[c] && (i = j[c]),
        sb.test(i) && !ob.test(c) && (e = j.left, f = a.runtimeStyle, g = f && f.left, g && (f.left = a.currentStyle.left), j.left = "fontSize" === c ? "1em": i, i = j.pixelLeft + "px", j.left = e, g && (f.left = g)),
        "" === i ? "auto": i
    }),
    ka.each(["height", "width"],
    function(a, b) {
        ka.cssHooks[b] = {
            get: function(a, c, d) {
                return c ? 0 === a.offsetWidth && pb.test(ka.css(a, "display")) ? ka.swap(a, vb,
                function() {
                    return B(a, b, d)
                }) : B(a, b, d) : void 0
            },
            set: function(a, c, d) {
                var e = d && kb(a);
                return z(a, c, d ? A(a, b, d, ka.support.boxSizing && "border-box" === ka.css(a, "boxSizing", !1, e), e) : 0)
            }
        }
    }),
    ka.support.opacity || (ka.cssHooks.opacity = {
        get: function(a, b) {
            return nb.test((b && a.currentStyle ? a.currentStyle.filter: a.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "": b ? "1": ""
        },
        set: function(a, b) {
            var c = a.style,
            d = a.currentStyle,
            e = ka.isNumeric(b) ? "alpha(opacity=" + 100 * b + ")": "",
            f = d && d.filter || c.filter || "";
            c.zoom = 1,
            (b >= 1 || "" === b) && "" === ka.trim(f.replace(mb, "")) && c.removeAttribute && (c.removeAttribute("filter"), "" === b || d && !d.filter) || (c.filter = mb.test(f) ? f.replace(mb, e) : f + " " + e)
        }
    }),
    ka(function() {
        ka.support.reliableMarginRight || (ka.cssHooks.marginRight = {
            get: function(a, b) {
                return b ? ka.swap(a, {
                    display: "inline-block"
                },
                lb, [a, "marginRight"]) : void 0
            }
        }),
        !ka.support.pixelPosition && ka.fn.position && ka.each(["top", "left"],
        function(a, b) {
            ka.cssHooks[b] = {
                get: function(a, c) {
                    return c ? (c = lb(a, b), sb.test(c) ? ka(a).position()[b] + "px": c) : void 0
                }
            }
        })
    }),
    ka.expr && ka.expr.filters && (ka.expr.filters.hidden = function(a) {
        return a.offsetWidth <= 0 && a.offsetHeight <= 0 || !ka.support.reliableHiddenOffsets && "none" === (a.style && a.style.display || ka.css(a, "display"))
    },
    ka.expr.filters.visible = function(a) {
        return ! ka.expr.filters.hidden(a)
    }),
    ka.each({
        margin: "",
        padding: "",
        border: "Width"
    },
    function(a, b) {
        ka.cssHooks[a + b] = {
            expand: function(c) {
                for (var d = 0,
                e = {},
                f = "string" == typeof c ? c.split(" ") : [c]; 4 > d; d++) e[a + xb[d] + b] = f[d] || f[d - 2] || f[0];
                return e
            }
        },
        qb.test(a) || (ka.cssHooks[a + b].set = z)
    });
    var zb = /%20/g,
    Ab = /\[\]$/,
    Bb = /\r?\n/g,
    Cb = /^(?:submit|button|image|reset|file)$/i,
    Db = /^(?:input|select|textarea|keygen)/i;
    ka.fn.extend({
        serialize: function() {
            return ka.param(this.serializeArray())
        },
        serializeArray: function() {
            return this.map(function() {
                var a = ka.prop(this, "elements");
                return a ? ka.makeArray(a) : this
            }).filter(function() {
                var a = this.type;
                return this.name && !ka(this).is(":disabled") && Db.test(this.nodeName) && !Cb.test(a) && (this.checked || !bb.test(a))
            }).map(function(a, b) {
                var c = ka(this).val();
                return null == c ? null: ka.isArray(c) ? ka.map(c,
                function(a) {
                    return {
                        name: b.name,
                        value: a.replace(Bb, "\r\n")
                    }
                }) : {
                    name: b.name,
                    value: c.replace(Bb, "\r\n")
                }
            }).get()
        }
    }),
    ka.param = function(a, c) {
        var d, e = [],
        f = function(a, b) {
            b = ka.isFunction(b) ? b() : null == b ? "": b,
            e[e.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b)
        };
        if (c === b && (c = ka.ajaxSettings && ka.ajaxSettings.traditional), ka.isArray(a) || a.jquery && !ka.isPlainObject(a)) ka.each(a,
        function() {
            f(this.name, this.value)
        });
        else for (d in a) E(d, a[d], c, f);
        return e.join("&").replace(zb, "+")
    },
    ka.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),
    function(a, b) {
        ka.fn[b] = function(a, c) {
            return arguments.length > 0 ? this.on(b, null, a, c) : this.trigger(b)
        }
    }),
    ka.fn.extend({
        hover: function(a, b) {
            return this.mouseenter(a).mouseleave(b || a)
        },
        bind: function(a, b, c) {
            return this.on(a, null, b, c)
        },
        unbind: function(a, b) {
            return this.off(a, null, b)
        },
        delegate: function(a, b, c, d) {
            return this.on(b, a, c, d)
        },
        undelegate: function(a, b, c) {
            return 1 === arguments.length ? this.off(a, "**") : this.off(b, a || "**", c)
        }
    });
    var Eb, Fb, Gb = ka.now(),
    Hb = /\?/,
    Ib = /#.*$/,
    Jb = /([?&])_=[^&]*/,
    Kb = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm,
    Lb = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
    Mb = /^(?:GET|HEAD)$/,
    Nb = /^\/\//,
    Ob = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
    Pb = ka.fn.load,
    Qb = {},
    Rb = {},
    Sb = "*/".concat("*");
    try {
        Fb = X.href
    } catch(Tb) {
        Fb = Y.createElement("a"),
        Fb.href = "",
        Fb = Fb.href
    }
    Eb = Ob.exec(Fb.toLowerCase()) || [],
    ka.fn.load = function(a, c, d) {
        if ("string" != typeof a && Pb) return Pb.apply(this, arguments);
        var e, f, g, h = this,
        i = a.indexOf(" ");
        return i >= 0 && (e = a.slice(i, a.length), a = a.slice(0, i)),
        ka.isFunction(c) ? (d = c, c = b) : c && "object" == typeof c && (g = "POST"),
        h.length > 0 && ka.ajax({
            url: a,
            type: g,
            dataType: "html",
            data: c
        }).done(function(a) {
            f = arguments,
            h.html(e ? ka("<div>").append(ka.parseHTML(a)).find(e) : a)
        }).complete(d &&
        function(a, b) {
            h.each(d, f || [a.responseText, b, a])
        }),
        this
    },
    ka.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"],
    function(a, b) {
        ka.fn[b] = function(a) {
            return this.on(b, a)
        }
    }),
    ka.extend({
        active: 0,
        lastModified: {},
        etag: {},
        ajaxSettings: {
            url: Fb,
            type: "GET",
            isLocal: Lb.test(Eb[1]),
            global: !0,
            processData: !0,
            async: !0,
            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
            accepts: {
                "*": Sb,
                text: "text/plain",
                html: "text/html",
                xml: "application/xml, text/xml",
                json: "application/json, text/javascript"
            },
            contents: {
                xml: /xml/,
                html: /html/,
                json: /json/
            },
            responseFields: {
                xml: "responseXML",
                text: "responseText",
                json: "responseJSON"
            },
            converters: {
                "* text": String,
                "text html": !0,
                "text json": ka.parseJSON,
                "text xml": ka.parseXML
            },
            flatOptions: {
                url: !0,
                context: !0
            }
        },
        ajaxSetup: function(a, b) {
            return b ? H(H(a, ka.ajaxSettings), b) : H(ka.ajaxSettings, a)
        },
        ajaxPrefilter: F(Qb),
        ajaxTransport: F(Rb),
        ajax: function(a, c) {
            function d(a, c, d, e) {
                var f, l, s, t, v, x = c;
                2 !== u && (u = 2, i && clearTimeout(i), k = b, h = e || "", w.readyState = a > 0 ? 4 : 0, f = a >= 200 && 300 > a || 304 === a, d && (t = I(m, w, d)), t = J(m, t, w, f), f ? (m.ifModified && (v = w.getResponseHeader("Last-Modified"), v && (ka.lastModified[g] = v), v = w.getResponseHeader("etag"), v && (ka.etag[g] = v)), 204 === a || "HEAD" === m.type ? x = "nocontent": 304 === a ? x = "notmodified": (x = t.state, l = t.data, s = t.error, f = !s)) : (s = x, (a || !x) && (x = "error", 0 > a && (a = 0))), w.status = a, w.statusText = (c || x) + "", f ? p.resolveWith(n, [l, x, w]) : p.rejectWith(n, [w, x, s]), w.statusCode(r), r = b, j && o.trigger(f ? "ajaxSuccess": "ajaxError", [w, m, f ? l: s]), q.fireWith(n, [w, x]), j && (o.trigger("ajaxComplete", [w, m]), --ka.active || ka.event.trigger("ajaxStop")))
            }
            "object" == typeof a && (c = a, a = b),
            c = c || {};
            var e, f, g, h, i, j, k, l, m = ka.ajaxSetup({},
            c),
            n = m.context || m,
            o = m.context && (n.nodeType || n.jquery) ? ka(n) : ka.event,
            p = ka.Deferred(),
            q = ka.Callbacks("once memory"),
            r = m.statusCode || {},
            s = {},
            t = {},
            u = 0,
            v = "canceled",
            w = {
                readyState: 0,
                getResponseHeader: function(a) {
                    var b;
                    if (2 === u) {
                        if (!l) for (l = {}; b = Kb.exec(h);) l[b[1].toLowerCase()] = b[2];
                        b = l[a.toLowerCase()]
                    }
                    return null == b ? null: b
                },
                getAllResponseHeaders: function() {
                    return 2 === u ? h: null
                },
                setRequestHeader: function(a, b) {
                    var c = a.toLowerCase();
                    return u || (a = t[c] = t[c] || a, s[a] = b),
                    this
                },
                overrideMimeType: function(a) {
                    return u || (m.mimeType = a),
                    this
                },
                statusCode: function(a) {
                    var b;
                    if (a) if (2 > u) for (b in a) r[b] = [r[b], a[b]];
                    else w.always(a[w.status]);
                    return this
                },
                abort: function(a) {
                    var b = a || v;
                    return k && k.abort(b),
                    d(0, b),
                    this
                }
            };
            if (p.promise(w).complete = q.add, w.success = w.done, w.error = w.fail, m.url = ((a || m.url || Fb) + "").replace(Ib, "").replace(Nb, Eb[1] + "//"), m.type = c.method || c.type || m.method || m.type, m.dataTypes = ka.trim(m.dataType || "*").toLowerCase().match(ma) || [""], null == m.crossDomain && (e = Ob.exec(m.url.toLowerCase()), m.crossDomain = !(!e || e[1] === Eb[1] && e[2] === Eb[2] && (e[3] || ("http:" === e[1] ? "80": "443")) === (Eb[3] || ("http:" === Eb[1] ? "80": "443")))), m.data && m.processData && "string" != typeof m.data && (m.data = ka.param(m.data, m.traditional)), G(Qb, m, c, w), 2 === u) return w;
            j = m.global,
            j && 0 === ka.active++&&ka.event.trigger("ajaxStart"),
            m.type = m.type.toUpperCase(),
            m.hasContent = !Mb.test(m.type),
            g = m.url,
            m.hasContent || (m.data && (g = m.url += (Hb.test(g) ? "&": "?") + m.data, delete m.data), m.cache === !1 && (m.url = Jb.test(g) ? g.replace(Jb, "$1_=" + Gb++) : g + (Hb.test(g) ? "&": "?") + "_=" + Gb++)),
            m.ifModified && (ka.lastModified[g] && w.setRequestHeader("If-Modified-Since", ka.lastModified[g]), ka.etag[g] && w.setRequestHeader("If-None-Match", ka.etag[g])),
            (m.data && m.hasContent && m.contentType !== !1 || c.contentType) && w.setRequestHeader("Content-Type", m.contentType),
            w.setRequestHeader("Accept", m.dataTypes[0] && m.accepts[m.dataTypes[0]] ? m.accepts[m.dataTypes[0]] + ("*" !== m.dataTypes[0] ? ", " + Sb + "; q=0.01": "") : m.accepts["*"]);
            for (f in m.headers) w.setRequestHeader(f, m.headers[f]);
            if (m.beforeSend && (m.beforeSend.call(n, w, m) === !1 || 2 === u)) return w.abort();
            v = "abort";
            for (f in {
                success: 1,
                error: 1,
                complete: 1
            }) w[f](m[f]);
            if (k = G(Rb, m, c, w)) {
                w.readyState = 1,
                j && o.trigger("ajaxSend", [w, m]),
                m.async && m.timeout > 0 && (i = setTimeout(function() {
                    w.abort("timeout")
                },
                m.timeout));
                try {
                    u = 1,
                    k.send(s, d)
                } catch(x) {
                    if (! (2 > u)) throw x;
                    d( - 1, x)
                }
            } else d( - 1, "No Transport");
            return w
        },
        getJSON: function(a, b, c) {
            return ka.get(a, b, c, "json")
        },
        getScript: function(a, c) {
            return ka.get(a, b, c, "script")
        }
    }),
    ka.each(["get", "post"],
    function(a, c) {
        ka[c] = function(a, d, e, f) {
            return ka.isFunction(d) && (f = f || e, e = d, d = b),
            ka.ajax({
                url: a,
                type: c,
                dataType: f,
                data: d,
                success: e
            })
        }
    }),
    ka.ajaxSetup({
        accepts: {
            script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
        },
        contents: {
            script: /(?:java|ecma)script/
        },
        converters: {
            "text script": function(a) {
                return ka.globalEval(a),
                a
            }
        }
    }),
    ka.ajaxPrefilter("script",
    function(a) {
        a.cache === b && (a.cache = !1),
        a.crossDomain && (a.type = "GET", a.global = !1)
    }),
    ka.ajaxTransport("script",
    function(a) {
        if (a.crossDomain) {
            var c, d = Y.head || ka("head")[0] || Y.documentElement;
            return {
                send: function(b, e) {
                    c = Y.createElement("script"),
                    c.async = !0,
                    a.scriptCharset && (c.charset = a.scriptCharset),
                    c.src = a.url,
                    c.onload = c.onreadystatechange = function(a, b) { (b || !c.readyState || /loaded|complete/.test(c.readyState)) && (c.onload = c.onreadystatechange = null, c.parentNode && c.parentNode.removeChild(c), c = null, b || e(200, "success"))
                    },
                    d.insertBefore(c, d.firstChild)
                },
                abort: function() {
                    c && c.onload(b, !0)
                }
            }
        }
    });
    var Ub = [],
    Vb = /(=)\?(?=&|$)|\?\?/;
    ka.ajaxSetup({
        jsonp: "callback",
        jsonpCallback: function() {
            var a = Ub.pop() || ka.expando + "_" + Gb++;
            return this[a] = !0,
            a
        }
    }),
    ka.ajaxPrefilter("json jsonp",
    function(c, d, e) {
        var f, g, h, i = c.jsonp !== !1 && (Vb.test(c.url) ? "url": "string" == typeof c.data && !(c.contentType || "").indexOf("application/x-www-form-urlencoded") && Vb.test(c.data) && "data");
        return i || "jsonp" === c.dataTypes[0] ? (f = c.jsonpCallback = ka.isFunction(c.jsonpCallback) ? c.jsonpCallback() : c.jsonpCallback, i ? c[i] = c[i].replace(Vb, "$1" + f) : c.jsonp !== !1 && (c.url += (Hb.test(c.url) ? "&": "?") + c.jsonp + "=" + f), c.converters["script json"] = function() {
            return h || ka.error(f + " was not called"),
            h[0]
        },
        c.dataTypes[0] = "json", g = a[f], a[f] = function() {
            h = arguments
        },
        e.always(function() {
            a[f] = g,
            c[f] && (c.jsonpCallback = d.jsonpCallback, Ub.push(f)),
            h && ka.isFunction(g) && g(h[0]),
            h = g = b
        }), "script") : void 0
    });
    var Wb, Xb, Yb = 0,
    Zb = a.ActiveXObject &&
    function() {
        var a;
        for (a in Wb) Wb[a](b, !0)
    };
    ka.ajaxSettings.xhr = a.ActiveXObject ?
    function() {
        return ! this.isLocal && K() || L()
    }: K,
    Xb = ka.ajaxSettings.xhr(),
    ka.support.cors = !!Xb && "withCredentials" in Xb,
    Xb = ka.support.ajax = !!Xb,
    Xb && ka.ajaxTransport(function(c) {
        if (!c.crossDomain || ka.support.cors) {
            var d;
            return {
                send: function(e, f) {
                    var g, h, i = c.xhr();
                    if (c.username ? i.open(c.type, c.url, c.async, c.username, c.password) : i.open(c.type, c.url, c.async), c.xhrFields) for (h in c.xhrFields) i[h] = c.xhrFields[h];
                    c.mimeType && i.overrideMimeType && i.overrideMimeType(c.mimeType),
                    c.crossDomain || e["X-Requested-With"] || (e["X-Requested-With"] = "XMLHttpRequest");
                    try {
                        for (h in e) i.setRequestHeader(h, e[h])
                    } catch(j) {}
                    i.send(c.hasContent && c.data || null),
                    d = function(a, e) {
                        var h, j, k, l;
                        try {
                            if (d && (e || 4 === i.readyState)) if (d = b, g && (i.onreadystatechange = ka.noop, Zb && delete Wb[g]), e) 4 !== i.readyState && i.abort();
                            else {
                                l = {},
                                h = i.status,
                                j = i.getAllResponseHeaders(),
                                "string" == typeof i.responseText && (l.text = i.responseText);
                                try {
                                    k = i.statusText
                                } catch(m) {
                                    k = ""
                                }
                                h || !c.isLocal || c.crossDomain ? 1223 === h && (h = 204) : h = l.text ? 200 : 404
                            }
                        } catch(n) {
                            e || f( - 1, n)
                        }
                        l && f(h, k, l, j)
                    },
                    c.async ? 4 === i.readyState ? setTimeout(d) : (g = ++Yb, Zb && (Wb || (Wb = {},
                    ka(a).unload(Zb)), Wb[g] = d), i.onreadystatechange = d) : d()
                },
                abort: function() {
                    d && d(b, !0)
                }
            }
        }
    });
    var $b, _b, ac = /^(?:toggle|show|hide)$/,
    bc = new RegExp("^(?:([+-])=|)(" + la + ")([a-z%]*)$", "i"),
    cc = /queueHooks$/,
    dc = [Q],
    ec = {
        "*": [function(a, b) {
            var c = this.createTween(a, b),
            d = c.cur(),
            e = bc.exec(b),
            f = e && e[3] || (ka.cssNumber[a] ? "": "px"),
            g = (ka.cssNumber[a] || "px" !== f && +d) && bc.exec(ka.css(c.elem, a)),
            h = 1,
            i = 20;
            if (g && g[3] !== f) {
                f = f || g[3],
                e = e || [],
                g = +d || 1;
                do h = h || ".5",
                g /= h,
                ka.style(c.elem, a, g + f);
                while (h !== (h = c.cur() / d) && 1 !== h && --i)
            }
            return e && (g = c.start = +g || +d || 0, c.unit = f, c.end = e[1] ? g + (e[1] + 1) * e[2] : +e[2]),
            c
        }]
    };
    ka.Animation = ka.extend(O, {
        tweener: function(a, b) {
            ka.isFunction(a) ? (b = a, a = ["*"]) : a = a.split(" ");
            for (var c, d = 0,
            e = a.length; e > d; d++) c = a[d],
            ec[c] = ec[c] || [],
            ec[c].unshift(b)
        },
        prefilter: function(a, b) {
            b ? dc.unshift(a) : dc.push(a)
        }
    }),
    ka.Tween = R,
    R.prototype = {
        constructor: R,
        init: function(a, b, c, d, e, f) {
            this.elem = a,
            this.prop = c,
            this.easing = e || "swing",
            this.options = b,
            this.start = this.now = this.cur(),
            this.end = d,
            this.unit = f || (ka.cssNumber[c] ? "": "px")
        },
        cur: function() {
            var a = R.propHooks[this.prop];
            return a && a.get ? a.get(this) : R.propHooks._default.get(this)
        },
        run: function(a) {
            var b, c = R.propHooks[this.prop];
            return this.options.duration ? this.pos = b = ka.easing[this.easing](a, this.options.duration * a, 0, 1, this.options.duration) : this.pos = b = a,
            this.now = (this.end - this.start) * b + this.start,
            this.options.step && this.options.step.call(this.elem, this.now, this),
            c && c.set ? c.set(this) : R.propHooks._default.set(this),
            this
        }
    },
    R.prototype.init.prototype = R.prototype,
    R.propHooks = {
        _default: {
            get: function(a) {
                var b;
                return null == a.elem[a.prop] || a.elem.style && null != a.elem.style[a.prop] ? (b = ka.css(a.elem, a.prop, ""), b && "auto" !== b ? b: 0) : a.elem[a.prop]
            },
            set: function(a) {
                ka.fx.step[a.prop] ? ka.fx.step[a.prop](a) : a.elem.style && (null != a.elem.style[ka.cssProps[a.prop]] || ka.cssHooks[a.prop]) ? ka.style(a.elem, a.prop, a.now + a.unit) : a.elem[a.prop] = a.now
            }
        }
    },
    R.propHooks.scrollTop = R.propHooks.scrollLeft = {
        set: function(a) {
            a.elem.nodeType && a.elem.parentNode && (a.elem[a.prop] = a.now)
        }
    },
    ka.each(["toggle", "show", "hide"],
    function(a, b) {
        var c = ka.fn[b];
        ka.fn[b] = function(a, d, e) {
            return null == a || "boolean" == typeof a ? c.apply(this, arguments) : this.animate(S(b, !0), a, d, e)
        }
    }),
    ka.fn.extend({
        fadeTo: function(a, b, c, d) {
            return this.filter(x).css("opacity", 0).show().end().animate({
                opacity: b
            },
            a, c, d)
        },
        animate: function(a, b, c, d) {
            var e = ka.isEmptyObject(a),
            f = ka.speed(b, c, d),
            g = function() {
                var b = O(this, ka.extend({},
                a), f); (e || ka._data(this, "finish")) && b.stop(!0)
            };
            return g.finish = g,
            e || f.queue === !1 ? this.each(g) : this.queue(f.queue, g)
        },
        stop: function(a, c, d) {
            var e = function(a) {
                var b = a.stop;
                delete a.stop,
                b(d)
            };
            return "string" != typeof a && (d = c, c = a, a = b),
            c && a !== !1 && this.queue(a || "fx", []),
            this.each(function() {
                var b = !0,
                c = null != a && a + "queueHooks",
                f = ka.timers,
                g = ka._data(this);
                if (c) g[c] && g[c].stop && e(g[c]);
                else for (c in g) g[c] && g[c].stop && cc.test(c) && e(g[c]);
                for (c = f.length; c--;) f[c].elem !== this || null != a && f[c].queue !== a || (f[c].anim.stop(d), b = !1, f.splice(c, 1)); (b || !d) && ka.dequeue(this, a)
            })
        },
        finish: function(a) {
            return a !== !1 && (a = a || "fx"),
            this.each(function() {
                var b, c = ka._data(this),
                d = c[a + "queue"],
                e = c[a + "queueHooks"],
                f = ka.timers,
                g = d ? d.length: 0;
                for (c.finish = !0, ka.queue(this, a, []), e && e.stop && e.stop.call(this, !0), b = f.length; b--;) f[b].elem === this && f[b].queue === a && (f[b].anim.stop(!0), f.splice(b, 1));
                for (b = 0; g > b; b++) d[b] && d[b].finish && d[b].finish.call(this);
                delete c.finish
            })
        }
    }),
    ka.each({
        slideDown: S("show"),
        slideUp: S("hide"),
        slideToggle: S("toggle"),
        fadeIn: {
            opacity: "show"
        },
        fadeOut: {
            opacity: "hide"
        },
        fadeToggle: {
            opacity: "toggle"
        }
    },
    function(a, b) {
        ka.fn[a] = function(a, c, d) {
            return this.animate(b, a, c, d)
        }
    }),
    ka.speed = function(a, b, c) {
        var d = a && "object" == typeof a ? ka.extend({},
        a) : {
            complete: c || !c && b || ka.isFunction(a) && a,
            duration: a,
            easing: c && b || b && !ka.isFunction(b) && b
        };
        return d.duration = ka.fx.off ? 0 : "number" == typeof d.duration ? d.duration: d.duration in ka.fx.speeds ? ka.fx.speeds[d.duration] : ka.fx.speeds._default,
        (null == d.queue || d.queue === !0) && (d.queue = "fx"),
        d.old = d.complete,
        d.complete = function() {
            ka.isFunction(d.old) && d.old.call(this),
            d.queue && ka.dequeue(this, d.queue)
        },
        d
    },
    ka.easing = {
        linear: function(a) {
            return a
        },
        swing: function(a) {
            return.5 - Math.cos(a * Math.PI) / 2
        }
    },
    ka.timers = [],
    ka.fx = R.prototype.init,
    ka.fx.tick = function() {
        var a, c = ka.timers,
        d = 0;
        for ($b = ka.now(); d < c.length; d++) a = c[d],
        a() || c[d] !== a || c.splice(d--, 1);
        c.length || ka.fx.stop(),
        $b = b
    },
    ka.fx.timer = function(a) {
        a() && ka.timers.push(a) && ka.fx.start()
    },
    ka.fx.interval = 13,
    ka.fx.start = function() {
        _b || (_b = setInterval(ka.fx.tick, ka.fx.interval))
    },
    ka.fx.stop = function() {
        clearInterval(_b),
        _b = null
    },
    ka.fx.speeds = {
        slow: 600,
        fast: 200,
        _default: 400
    },
    ka.fx.step = {},
    ka.expr && ka.expr.filters && (ka.expr.filters.animated = function(a) {
        return ka.grep(ka.timers,
        function(b) {
            return a === b.elem
        }).length
    }),
    ka.fn.offset = function(a) {
        if (arguments.length) return a === b ? this: this.each(function(b) {
            ka.offset.setOffset(this, a, b)
        });
        var c, d, e = {
            top: 0,
            left: 0
        },
        f = this[0],
        g = f && f.ownerDocument;
        if (g) return c = g.documentElement,
        ka.contains(c, f) ? (typeof f.getBoundingClientRect !== W && (e = f.getBoundingClientRect()), d = T(g), {
            top: e.top + (d.pageYOffset || c.scrollTop) - (c.clientTop || 0),
            left: e.left + (d.pageXOffset || c.scrollLeft) - (c.clientLeft || 0)
        }) : e
    },
    ka.offset = {
        setOffset: function(a, b, c) {
            var d = ka.css(a, "position");
            "static" === d && (a.style.position = "relative");
            var e, f, g = ka(a),
            h = g.offset(),
            i = ka.css(a, "top"),
            j = ka.css(a, "left"),
            k = ("absolute" === d || "fixed" === d) && ka.inArray("auto", [i, j]) > -1,
            l = {},
            m = {};
            k ? (m = g.position(), e = m.top, f = m.left) : (e = parseFloat(i) || 0, f = parseFloat(j) || 0),
            ka.isFunction(b) && (b = b.call(a, c, h)),
            null != b.top && (l.top = b.top - h.top + e),
            null != b.left && (l.left = b.left - h.left + f),
            "using" in b ? b.using.call(a, l) : g.css(l)
        }
    },
    ka.fn.extend({
        position: function() {
            if (this[0]) {
                var a, b, c = {
                    top: 0,
                    left: 0
                },
                d = this[0];
                return "fixed" === ka.css(d, "position") ? b = d.getBoundingClientRect() : (a = this.offsetParent(), b = this.offset(), ka.nodeName(a[0], "html") || (c = a.offset()), c.top += ka.css(a[0], "borderTopWidth", !0), c.left += ka.css(a[0], "borderLeftWidth", !0)),
                {
                    top: b.top - c.top - ka.css(d, "marginTop", !0),
                    left: b.left - c.left - ka.css(d, "marginLeft", !0)
                }
            }
        },
        offsetParent: function() {
            return this.map(function() {
                for (var a = this.offsetParent || Z; a && !ka.nodeName(a, "html") && "static" === ka.css(a, "position");) a = a.offsetParent;
                return a || Z
            })
        }
    }),
    ka.each({
        scrollLeft: "pageXOffset",
        scrollTop: "pageYOffset"
    },
    function(a, c) {
        var d = /Y/.test(c);
        ka.fn[a] = function(e) {
            return ka.access(this,
            function(a, e, f) {
                var g = T(a);
                return f === b ? g ? c in g ? g[c] : g.document.documentElement[e] : a[e] : void(g ? g.scrollTo(d ? ka(g).scrollLeft() : f, d ? f: ka(g).scrollTop()) : a[e] = f)
            },
            a, e, arguments.length, null)
        }
    }),
    ka.each({
        Height: "height",
        Width: "width"
    },
    function(a, c) {
        ka.each({
            padding: "inner" + a,
            content: c,
            "": "outer" + a
        },
        function(d, e) {
            ka.fn[e] = function(e, f) {
                var g = arguments.length && (d || "boolean" != typeof e),
                h = d || (e === !0 || f === !0 ? "margin": "border");
                return ka.access(this,
                function(c, d, e) {
                    var f;
                    return ka.isWindow(c) ? c.document.documentElement["client" + a] : 9 === c.nodeType ? (f = c.documentElement, Math.max(c.body["scroll" + a], f["scroll" + a], c.body["offset" + a], f["offset" + a], f["client" + a])) : e === b ? ka.css(c, d, h) : ka.style(c, d, e, h)
                },
                c, g ? e: b, g, null)
            }
        })
    }),
    ka.fn.size = function() {
        return this.length
    },
    ka.fn.andSelf = ka.fn.addBack,
    "object" == typeof module && module && "object" == typeof module.exports ? module.exports = ka: (a.jQuery = a.$ = ka, "function" == typeof define && define.amd && define("jquery", [],
    function() {
        return ka
    }))
} (window),
function(a, b) {
    "function" == typeof define && define.amd ? define(["jquery"], b) : "object" == typeof exports ? module.exports = b(require("jquery")) : b(a.jQuery)
} (this,
function(a) {
    function b(a) {
        if (a in l.style) return a;
        for (var b = ["Moz", "Webkit", "O", "ms"], c = a.charAt(0).toUpperCase() + a.substr(1), d = 0; d < b.length; ++d) {
            var e = b[d] + c;
            if (e in l.style) return e
        }
    }
    function c() {
        return l.style[m.transform] = "",
        l.style[m.transform] = "rotateY(90deg)",
        "" !== l.style[m.transform]
    }
    function d(a) {
        return "string" == typeof a && this.parse(a),
        this
    }
    function e(a, b, c) {
        b === !0 ? a.queue(c) : b ? a.queue(b, c) : a.each(function() {
            c.call(this)
        })
    }
    function f(b) {
        var c = [];
        return a.each(b,
        function(b) {
            b = a.camelCase(b),
            b = a.transit.propertyMap[b] || a.cssProps[b] || b,
            b = i(b),
            m[b] && (b = i(m[b])),
            -1 === a.inArray(b, c) && c.push(b)
        }),
        c
    }
    function g(b, c, d, e) {
        var g = f(b);
        a.cssEase[d] && (d = a.cssEase[d]);
        var h = "" + k(c) + " " + d;
        parseInt(e, 10) > 0 && (h += " " + k(e));
        var i = [];
        return a.each(g,
        function(a, b) {
            i.push(b + " " + h)
        }),
        i.join(", ")
    }
    function h(b, c) {
        c || (a.cssNumber[b] = !0),
        a.transit.propertyMap[b] = m.transform,
        a.cssHooks[b] = {
            get: function(c) {
                var d = a(c).css("transit:transform");
                return d.get(b)
            },
            set: function(c, d) {
                var e = a(c).css("transit:transform");
                e.setFromString(b, d),
                a(c).css({
                    "transit:transform": e
                })
            }
        }
    }
    function i(a) {
        return a.replace(/([A-Z])/g,
        function(a) {
            return "-" + a.toLowerCase()
        })
    }
    function j(a, b) {
        return "string" != typeof a || a.match(/^[\-0-9\.]+$/) ? "" + a + b: a
    }
    function k(b) {
        var c = b;
        return "string" != typeof c || c.match(/^[\-0-9\.]+/) || (c = a.fx.speeds[c] || a.fx.speeds._default),
        j(c, "ms")
    }
    a.transit = {
        version: "0.9.12",
        propertyMap: {
            marginLeft: "margin",
            marginRight: "margin",
            marginBottom: "margin",
            marginTop: "margin",
            paddingLeft: "padding",
            paddingRight: "padding",
            paddingBottom: "padding",
            paddingTop: "padding"
        },
        enabled: !0,
        useTransitionEnd: !1
    };
    var l = document.createElement("div"),
    m = {},
    n = navigator.userAgent.toLowerCase().indexOf("chrome") > -1;
    m.transition = b("transition"),
    m.transitionDelay = b("transitionDelay"),
    m.transform = b("transform"),
    m.transformOrigin = b("transformOrigin"),
    m.filter = b("Filter"),
    m.transform3d = c();
    var o = {
        transition: "transitionend",
        MozTransition: "transitionend",
        OTransition: "oTransitionEnd",
        WebkitTransition: "webkitTransitionEnd",
        msTransition: "MSTransitionEnd"
    },
    p = m.transitionEnd = o[m.transition] || null;
    for (var q in m) m.hasOwnProperty(q) && "undefined" == typeof a.support[q] && (a.support[q] = m[q]);
    return l = null,
    a.cssEase = {
        _default: "ease",
        "in": "ease-in",
        out: "ease-out",
        "in-out": "ease-in-out",
        snap: "cubic-bezier(0,1,.5,1)",
        easeInCubic: "cubic-bezier(.550,.055,.675,.190)",
        easeOutCubic: "cubic-bezier(.215,.61,.355,1)",
        easeInOutCubic: "cubic-bezier(.645,.045,.355,1)",
        easeInCirc: "cubic-bezier(.6,.04,.98,.335)",
        easeOutCirc: "cubic-bezier(.075,.82,.165,1)",
        easeInOutCirc: "cubic-bezier(.785,.135,.15,.86)",
        easeInExpo: "cubic-bezier(.95,.05,.795,.035)",
        easeOutExpo: "cubic-bezier(.19,1,.22,1)",
        easeInOutExpo: "cubic-bezier(1,0,0,1)",
        easeInQuad: "cubic-bezier(.55,.085,.68,.53)",
        easeOutQuad: "cubic-bezier(.25,.46,.45,.94)",
        easeInOutQuad: "cubic-bezier(.455,.03,.515,.955)",
        easeInQuart: "cubic-bezier(.895,.03,.685,.22)",
        easeOutQuart: "cubic-bezier(.165,.84,.44,1)",
        easeInOutQuart: "cubic-bezier(.77,0,.175,1)",
        easeInQuint: "cubic-bezier(.755,.05,.855,.06)",
        easeOutQuint: "cubic-bezier(.23,1,.32,1)",
        easeInOutQuint: "cubic-bezier(.86,0,.07,1)",
        easeInSine: "cubic-bezier(.47,0,.745,.715)",
        easeOutSine: "cubic-bezier(.39,.575,.565,1)",
        easeInOutSine: "cubic-bezier(.445,.05,.55,.95)",
        easeInBack: "cubic-bezier(.6,-.28,.735,.045)",
        easeOutBack: "cubic-bezier(.175, .885,.32,1.275)",
        easeInOutBack: "cubic-bezier(.68,-.55,.265,1.55)"
    },
    a.cssHooks["transit:transform"] = {
        get: function(b) {
            return a(b).data("transform") || new d
        },
        set: function(b, c) {
            var e = c;
            e instanceof d || (e = new d(e)),
            "WebkitTransform" !== m.transform || n ? b.style[m.transform] = e.toString() : b.style[m.transform] = e.toString(!0),
            a(b).data("transform", e)
        }
    },
    a.cssHooks.transform = {
        set: a.cssHooks["transit:transform"].set
    },
    a.cssHooks.filter = {
        get: function(a) {
            return a.style[m.filter]
        },
        set: function(a, b) {
            a.style[m.filter] = b
        }
    },
    a.fn.jquery < "1.8" && (a.cssHooks.transformOrigin = {
        get: function(a) {
            return a.style[m.transformOrigin]
        },
        set: function(a, b) {
            a.style[m.transformOrigin] = b
        }
    },
    a.cssHooks.transition = {
        get: function(a) {
            return a.style[m.transition]
        },
        set: function(a, b) {
            a.style[m.transition] = b
        }
    }),
    h("scale"),
    h("scaleX"),
    h("scaleY"),
    h("translate"),
    h("rotate"),
    h("rotateX"),
    h("rotateY"),
    h("rotate3d"),
    h("perspective"),
    h("skewX"),
    h("skewY"),
    h("x", !0),
    h("y", !0),
    d.prototype = {
        setFromString: function(a, b) {
            var c = "string" == typeof b ? b.split(",") : b.constructor === Array ? b: [b];
            c.unshift(a),
            d.prototype.set.apply(this, c)
        },
        set: function(a) {
            var b = Array.prototype.slice.apply(arguments, [1]);
            this.setter[a] ? this.setter[a].apply(this, b) : this[a] = b.join(",")
        },
        get: function(a) {
            return this.getter[a] ? this.getter[a].apply(this) : this[a] || 0
        },
        setter: {
            rotate: function(a) {
                this.rotate = j(a, "deg")
            },
            rotateX: function(a) {
                this.rotateX = j(a, "deg")
            },
            rotateY: function(a) {
                this.rotateY = j(a, "deg")
            },
            scale: function(a, b) {
                void 0 === b && (b = a),
                this.scale = a + "," + b
            },
            skewX: function(a) {
                this.skewX = j(a, "deg")
            },
            skewY: function(a) {
                this.skewY = j(a, "deg")
            },
            perspective: function(a) {
                this.perspective = j(a, "px")
            },
            x: function(a) {
                this.set("translate", a, null)
            },
            y: function(a) {
                this.set("translate", null, a)
            },
            translate: function(a, b) {
                void 0 === this._translateX && (this._translateX = 0),
                void 0 === this._translateY && (this._translateY = 0),
                null !== a && void 0 !== a && (this._translateX = j(a, "px")),
                null !== b && void 0 !== b && (this._translateY = j(b, "px")),
                this.translate = this._translateX + "," + this._translateY
            }
        },
        getter: {
            x: function() {
                return this._translateX || 0
            },
            y: function() {
                return this._translateY || 0
            },
            scale: function() {
                var a = (this.scale || "1,1").split(",");
                return a[0] && (a[0] = parseFloat(a[0])),
                a[1] && (a[1] = parseFloat(a[1])),
                a[0] === a[1] ? a[0] : a
            },
            rotate3d: function() {
                for (var a = (this.rotate3d || "0,0,0,0deg").split(","), b = 0; 3 >= b; ++b) a[b] && (a[b] = parseFloat(a[b]));
                return a[3] && (a[3] = j(a[3], "deg")),
                a
            }
        },
        parse: function(a) {
            var b = this;
            a.replace(/([a-zA-Z0-9]+)\((.*?)\)/g,
            function(a, c, d) {
                b.setFromString(c, d)
            })
        },
        toString: function(a) {
            var b = [];
            for (var c in this) if (this.hasOwnProperty(c)) {
                if (!m.transform3d && ("rotateX" === c || "rotateY" === c || "perspective" === c || "transformOrigin" === c)) continue;
                "_" !== c[0] && (a && "scale" === c ? b.push(c + "3d(" + this[c] + ",1)") : a && "translate" === c ? b.push(c + "3d(" + this[c] + ",0)") : b.push(c + "(" + this[c] + ")"))
            }
            return b.join(" ")
        }
    },
    a.fn.transition = a.fn.transit = function(b, c, d, f) {
        var h = this,
        i = 0,
        j = !0,
        l = a.extend(!0, {},
        b);
        "function" == typeof c && (f = c, c = void 0),
        "object" == typeof c && (d = c.easing, i = c.delay || 0, j = "undefined" == typeof c.queue ? !0 : c.queue, f = c.complete, c = c.duration),
        "function" == typeof d && (f = d, d = void 0),
        "undefined" != typeof l.easing && (d = l.easing, delete l.easing),
        "undefined" != typeof l.duration && (c = l.duration, delete l.duration),
        "undefined" != typeof l.complete && (f = l.complete, delete l.complete),
        "undefined" != typeof l.queue && (j = l.queue, delete l.queue),
        "undefined" != typeof l.delay && (i = l.delay, delete l.delay),
        "undefined" == typeof c && (c = a.fx.speeds._default),
        "undefined" == typeof d && (d = a.cssEase._default),
        c = k(c);
        var n = g(l, c, d, i),
        o = a.transit.enabled && m.transition,
        q = o ? parseInt(c, 10) + parseInt(i, 10) : 0;
        if (0 === q) {
            var r = function(a) {
                h.css(l),
                f && f.apply(h),
                a && a()
            };
            return e(h, j, r),
            h
        }
        var s = {},
        t = function(b) {
            var c = !1,
            d = function() {
                c && h.unbind(p, d),
                q > 0 && h.each(function() {
                    this.style[m.transition] = s[this] || null
                }),
                "function" == typeof f && f.apply(h),
                "function" == typeof b && b()
            };
            q > 0 && p && a.transit.useTransitionEnd ? (c = !0, h.bind(p, d)) : window.setTimeout(d, q),
            h.each(function() {
                q > 0 && (this.style[m.transition] = n),
                a(this).css(l)
            })
        },
        u = function(a) {
            this.offsetWidth,
            t(a)
        };
        return e(h, j, u),
        this
    },
    a.transit.getTransitionValue = g,
    a
}),
function(a) {
    "function" == typeof define && define.amd ? define(["jquery"], a) : a(jQuery)
} (function(a, b) {
    var c = 0,
    d = Array.prototype.slice,
    e = a.cleanData;
    a.cleanData = function(b) {
        for (var c, d = 0; null != (c = b[d]); d++) try {
            a(c).triggerHandler("remove")
        } catch(f) {}
        e(b)
    },
    a.widget = function(b, c, d) {
        var e, f, g, h, i = {},
        j = b.split(".")[0];
        b = b.split(".")[1],
        e = j + "-" + b,
        d || (d = c, c = a.Widget),
        a.expr[":"][e.toLowerCase()] = function(b) {
            return !! a.data(b, e)
        },
        a[j] = a[j] || {},
        f = a[j][b],
        g = a[j][b] = function(a, b) {
            return this._createWidget ? void(arguments.length && this._createWidget(a, b)) : new g(a, b)
        },
        a.extend(g, f, {
            version: d.version,
            _proto: a.extend({},
            d),
            _childConstructors: []
        }),
        h = new c,
        h.options = a.widget.extend({},
        h.options),
        a.each(d,
        function(b, d) {
            return a.isFunction(d) ? void(i[b] = function() {
                var a = function() {
                    return c.prototype[b].apply(this, arguments)
                },
                e = function(a) {
                    return c.prototype[b].apply(this, a)
                };
                return function() {
                    var b, c = this._super,
                    f = this._superApply;
                    return this._super = a,
                    this._superApply = e,
                    b = d.apply(this, arguments),
                    this._super = c,
                    this._superApply = f,
                    b
                }
            } ()) : void(i[b] = d)
        }),
        g.prototype = a.widget.extend(h, {
            widgetEventPrefix: f ? h.widgetEventPrefix: b
        },
        i, {
            constructor: g,
            namespace: j,
            widgetName: b,
            widgetFullName: e
        }),
        f ? (a.each(f._childConstructors,
        function(b, c) {
            var d = c.prototype;
            a.widget(d.namespace + "." + d.widgetName, g, c._proto)
        }), delete f._childConstructors) : c._childConstructors.push(g),
        a.widget.bridge(b, g)
    },
    a.widget.extend = function(c) {
        for (var e, f, g = d.call(arguments, 1), h = 0, i = g.length; i > h; h++) for (e in g[h]) f = g[h][e],
        g[h].hasOwnProperty(e) && f !== b && (a.isPlainObject(f) ? c[e] = a.isPlainObject(c[e]) ? a.widget.extend({},
        c[e], f) : a.widget.extend({},
        f) : c[e] = f);
        return c
    },
    a.widget.bridge = function(c, e) {
        var f = e.prototype.widgetFullName || c;
        a.fn[c] = function(g) {
            var h = "string" == typeof g,
            i = d.call(arguments, 1),
            j = this;
            return g = !h && i.length ? a.widget.extend.apply(null, [g].concat(i)) : g,
            h ? this.each(function() {
                var d, e = a.data(this, f);
                return e ? a.isFunction(e[g]) && "_" !== g.charAt(0) ? (d = e[g].apply(e, i), d !== e && d !== b ? (j = d && d.jquery ? j.pushStack(d.get()) : d, !1) : void 0) : a.error("no such method '" + g + "' for " + c + " widget instance") : a.error("cannot call methods on " + c + " prior to initialization; attempted to call method '" + g + "'")
            }) : this.each(function() {
                var b = a.data(this, f);
                b ? b.option(g || {})._init() : a.data(this, f, new e(g, this))
            }),
            j
        }
    },
    a.Widget = function() {},
    a.Widget._childConstructors = [],
    a.Widget.prototype = {
        widgetName: "widget",
        widgetEventPrefix: "",
        defaultElement: "<div>",
        options: {
            disabled: !1,
            create: null
        },
        _createWidget: function(b, d) {
            d = a(d || this.defaultElement || this)[0],
            this.element = a(d),
            this.uuid = c++,
            this.eventNamespace = "." + this.widgetName + this.uuid,
            this.options = a.widget.extend({},
            this.options, this._getCreateOptions(), b),
            this.bindings = a(),
            this.hoverable = a(),
            this.focusable = a(),
            d !== this && (a.data(d, this.widgetFullName, this), this._on(!0, this.element, {
                remove: function(a) {
                    a.target === d && this.destroy()
                }
            }), this.document = a(d.style ? d.ownerDocument: d.document || d), this.window = a(this.document[0].defaultView || this.document[0].parentWindow)),
            this._create(),
            this._trigger("create", null, this._getCreateEventData()),
            this._init()
        },
        _getCreateOptions: a.noop,
        _getCreateEventData: a.noop,
        _create: a.noop,
        _init: a.noop,
        destroy: function() {
            this._destroy(),
            this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(a.camelCase(this.widgetFullName)),
            this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName + "-disabled ui-state-disabled"),
            this.bindings.unbind(this.eventNamespace),
            this.hoverable.removeClass("ui-state-hover"),
            this.focusable.removeClass("ui-state-focus")
        },
        _destroy: a.noop,
        widget: function() {
            return this.element
        },
        option: function(c, d) {
            var e, f, g, h = c;
            if (0 === arguments.length) return a.widget.extend({},
            this.options);
            if ("string" == typeof c) if (h = {},
            e = c.split("."), c = e.shift(), e.length) {
                for (f = h[c] = a.widget.extend({},
                this.options[c]), g = 0; g < e.length - 1; g++) f[e[g]] = f[e[g]] || {},
                f = f[e[g]];
                if (c = e.pop(), d === b) return f[c] === b ? null: f[c];
                f[c] = d
            } else {
                if (d === b) return this.options[c] === b ? null: this.options[c];
                h[c] = d
            }
            return this._setOptions(h),
            this
        },
        _setOptions: function(a) {
            var b;
            for (b in a) this._setOption(b, a[b]);
            return this
        },
        _setOption: function(a, b) {
            return this.options[a] = b,
            "disabled" === a && (this.widget().toggleClass(this.widgetFullName + "-disabled ui-state-disabled", !!b).attr("aria-disabled", b), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")),
            this
        },
        enable: function() {
            return this._setOption("disabled", !1)
        },
        disable: function() {
            return this._setOption("disabled", !0)
        },
        _on: function(b, c, d) {
            var e, f = this;
            "boolean" != typeof b && (d = c, c = b, b = !1),
            d ? (c = e = a(c), this.bindings = this.bindings.add(c)) : (d = c, c = this.element, e = this.widget()),
            a.each(d,
            function(d, g) {
                function h() {
                    return b || f.options.disabled !== !0 && !a(this).hasClass("ui-state-disabled") ? ("string" == typeof g ? f[g] : g).apply(f, arguments) : void 0
                }
                "string" != typeof g && (h.guid = g.guid = g.guid || h.guid || a.guid++);
                var i = d.match(/^(\w+)\s*(.*)$/),
                j = i[1] + f.eventNamespace,
                k = i[2];
                k ? e.delegate(k, j, h) : c.bind(j, h)
            })
        },
        _off: function(a, b) {
            b = (b || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace,
            a.unbind(b).undelegate(b)
        },
        _delay: function(a, b) {
            function c() {
                return ("string" == typeof a ? d[a] : a).apply(d, arguments)
            }
            var d = this;
            return setTimeout(c, b || 0)
        },
        _hoverable: function(b) {
            this.hoverable = this.hoverable.add(b),
            this._on(b, {
                mouseenter: function(b) {
                    a(b.currentTarget).addClass("ui-state-hover")
                },
                mouseleave: function(b) {
                    a(b.currentTarget).removeClass("ui-state-hover")
                }
            })
        },
        _focusable: function(b) {
            this.focusable = this.focusable.add(b),
            this._on(b, {
                focusin: function(b) {
                    a(b.currentTarget).addClass("ui-state-focus")
                },
                focusout: function(b) {
                    a(b.currentTarget).removeClass("ui-state-focus")
                }
            })
        },
        _trigger: function(b, c, d) {
            var e, f, g = this.options[b];
            if (d = d || {},
            c = a.Event(c), c.type = (b === this.widgetEventPrefix ? b: this.widgetEventPrefix + b).toLowerCase(), c.target = this.element[0], f = c.originalEvent) for (e in f) e in c || (c[e] = f[e]);
            return this.element.trigger(c, d),
            !(a.isFunction(g) && g.apply(this.element[0], [c].concat(d)) === !1 || c.isDefaultPrevented())
        }
    },
    a.each({
        show: "fadeIn",
        hide: "fadeOut"
    },
    function(b, c) {
        a.Widget.prototype["_" + b] = function(d, e, f) {
            "string" == typeof e && (e = {
                effect: e
            });
            var g, h = e ? e === !0 || "number" == typeof e ? c: e.effect || c: b;
            e = e || {},
            "number" == typeof e && (e = {
                duration: e
            }),
            g = !a.isEmptyObject(e),
            e.complete = f,
            e.delay && d.delay(e.delay),
            g && a.effects && a.effects.effect[h] ? d[b](e) : h !== b && d[h] ? d[h](e.duration, e.easing, f) : d.queue(function(c) {
                a(this)[b](),
                f && f.call(d[0]),
                c()
            })
        }
    })
}),
function(a, b) {
    "object" == typeof exports ? module.exports = b() : "function" == typeof define && define.amd ? define(b) : a.printStackTrace = b()
} (this,
function() {
    function a(b) {
        b = b || {
            guess: !0
        };
        var c = b.e || null,
        d = !!b.guess,
        e = b.mode || null,
        f = new a.implementation,
        g = f.run(c, e);
        return d ? f.guessAnonymousFunctions(g) : g
    }
    return a.implementation = function() {},
    a.implementation.prototype = {
        run: function(a, b) {
            return a = a || this.createException(),
            b = b || this.mode(a),
            "other" === b ? this.other(arguments.callee) : this[b](a)
        },
        createException: function() {
            try {
                this.undef()
            } catch(a) {
                return a
            }
        },
        mode: function(a) {
            return "undefined" != typeof window && window.navigator.userAgent.indexOf("PhantomJS") > -1 ? "phantomjs": a.arguments && a.stack ? "chrome": a.stack && a.sourceURL ? "safari": a.stack && a.number ? "ie": a.stack && a.fileName ? "firefox": a.message && a["opera#sourceloc"] ? a.stacktrace ? a.message.indexOf("\n") > -1 && a.message.split("\n").length > a.stacktrace.split("\n").length ? "opera9": "opera10a": "opera9": a.message && a.stack && a.stacktrace ? a.stacktrace.indexOf("called from line") < 0 ? "opera10b": "opera11": a.stack && !a.fileName ? "chrome": "other"
        },
        instrumentFunction: function(b, c, d) {
            b = b || window;
            var e = b[c];
            b[c] = function() {
                return d.call(this, a().slice(4)),
                b[c]._instrumented.apply(this, arguments)
            },
            b[c]._instrumented = e
        },
        deinstrumentFunction: function(a, b) {
            a[b].constructor === Function && a[b]._instrumented && a[b]._instrumented.constructor === Function && (a[b] = a[b]._instrumented)
        },
        chrome: function(a) {
            return (a.stack + "\n").replace(/^[\s\S]+?\s+at\s+/, " at ").replace(/^\s+(at eval )?at\s+/gm, "").replace(/^([^\(]+?)([\n$])/gm, "{anonymous}() ($1)$2").replace(/^Object.<anonymous>\s*\(([^\)]+)\)/gm, "{anonymous}() ($1)").replace(/^(.+) \((.+)\)$/gm, "$1@$2").split("\n").slice(0, -1)
        },
        safari: function(a) {
            return a.stack.replace(/\[native code\]\n/m, "").replace(/^(?=\w+Error\:).*$\n/m, "").replace(/^@/gm, "{anonymous}()@").split("\n")
        },
        ie: function(a) {
            return a.stack.replace(/^\s*at\s+(.*)$/gm, "$1").replace(/^Anonymous function\s+/gm, "{anonymous}() ").replace(/^(.+)\s+\((.+)\)$/gm, "$1@$2").split("\n").slice(1)
        },
        firefox: function(a) {
            return a.stack.replace(/(?:\n@:0)?\s+$/m, "").replace(/^(?:\((\S*)\))?@/gm, "{anonymous}($1)@").split("\n")
        },
        opera11: function(a) {
            for (var b = "{anonymous}",
            c = /^.*line (\d+), column (\d+)(?: in (.+))? in (\S+):$/,
            d = a.stacktrace.split("\n"), e = [], f = 0, g = d.length; g > f; f += 2) {
                var h = c.exec(d[f]);
                if (h) {
                    var i = h[4] + ":" + h[1] + ":" + h[2],
                    j = h[3] || "global code";
                    j = j.replace(/<anonymous function: (\S+)>/, "$1").replace(/<anonymous function>/, b),
                    e.push(j + "@" + i + " -- " + d[f + 1].replace(/^\s+/, ""))
                }
            }
            return e
        },
        opera10b: function(a) {
            for (var b = /^(.*)@(.+):(\d+)$/,
            c = a.stacktrace.split("\n"), d = [], e = 0, f = c.length; f > e; e++) {
                var g = b.exec(c[e]);
                if (g) {
                    var h = g[1] ? g[1] + "()": "global code";
                    d.push(h + "@" + g[2] + ":" + g[3])
                }
            }
            return d
        },
        opera10a: function(a) {
            for (var b = "{anonymous}",
            c = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,
            d = a.stacktrace.split("\n"), e = [], f = 0, g = d.length; g > f; f += 2) {
                var h = c.exec(d[f]);
                if (h) {
                    var i = h[3] || b;
                    e.push(i + "()@" + h[2] + ":" + h[1] + " -- " + d[f + 1].replace(/^\s+/, ""))
                }
            }
            return e
        },
        opera9: function(a) {
            for (var b = "{anonymous}",
            c = /Line (\d+).*script (?:in )?(\S+)/i,
            d = a.message.split("\n"), e = [], f = 2, g = d.length; g > f; f += 2) {
                var h = c.exec(d[f]);
                h && e.push(b + "()@" + h[2] + ":" + h[1] + " -- " + d[f + 1].replace(/^\s+/, ""))
            }
            return e
        },
        phantomjs: function(a) {
            for (var b = "{anonymous}",
            c = /(\S+) \((\S+)\)/i,
            d = a.stack.split("\n"), e = [], f = 1, g = d.length; g > f; f++) {
                d[f] = d[f].replace(/^\s+at\s+/gm, "");
                var h = c.exec(d[f]);
                h ? e.push(h[1] + "()@" + h[2]) : e.push(b + "()@" + d[f])
            }
            return e
        },
        other: function(a) {
            for (var b, c, d = "{anonymous}",
            e = /function(?:\s+([\w$]+))?\s*\(/,
            f = [], g = 10, h = Array.prototype.slice; a && f.length < g;) {
                b = e.test(a.toString()) ? RegExp.$1 || d: d;
                try {
                    c = h.call(a.arguments || [])
                } catch(i) {
                    c = ["Cannot access arguments: " + i]
                }
                f[f.length] = b + "(" + this.stringifyArguments(c) + ")";
                try {
                    a = a.caller
                } catch(i) {
                    f[f.length] = "Cannot access caller: " + i;
                    break
                }
            }
            return f
        },
        stringifyArguments: function(a) {
            for (var b = [], c = Array.prototype.slice, d = 0; d < a.length; ++d) {
                var e = a[d];
                void 0 === e ? b[d] = "undefined": null === e ? b[d] = "null": e.constructor && (e.constructor === Array ? e.length < 3 ? b[d] = "[" + this.stringifyArguments(e) + "]": b[d] = "[" + this.stringifyArguments(c.call(e, 0, 1)) + "..." + this.stringifyArguments(c.call(e, -1)) + "]": e.constructor === Object ? b[d] = "#object": e.constructor === Function ? b[d] = "#function": e.constructor === String ? b[d] = '"' + e + '"': e.constructor === Number ? b[d] = e: b[d] = "?")
            }
            return b.join(",")
        },
        sourceCache: {},
        ajax: function(a) {
            var b = this.createXMLHTTPObject();
            if (b) try {
                return b.open("GET", a, !1),
                b.send(null),
                b.responseText
            } catch(c) {}
            return ""
        },
        createXMLHTTPObject: function() {
            for (var a, b = [function() {
                return new XMLHttpRequest
            },
            function() {
                return new ActiveXObject("Msxml2.XMLHTTP")
            },
            function() {
                return new ActiveXObject("Msxml3.XMLHTTP")
            },
            function() {
                return new ActiveXObject("Microsoft.XMLHTTP")
            }], c = 0; c < b.length; c++) try {
                return a = b[c](),
                this.createXMLHTTPObject = b[c],
                a
            } catch(d) {}
        },
        isSameDomain: function(a) {
            return "undefined" != typeof location && -1 !== a.indexOf(location.hostname)
        },
        getSource: function(a) {
            return a in this.sourceCache || (this.sourceCache[a] = this.ajax(a).split("\n")),
            this.sourceCache[a]
        },
        guessAnonymousFunctions: function(a) {
            for (var b = 0; b < a.length; ++b) {
                var c = /\{anonymous\}\(.*\)@(.*)/,
                d = /^(.*?)(?::(\d+))(?::(\d+))?(?: -- .+)?$/,
                e = a[b],
                f = c.exec(e);
                if (f) {
                    var g = d.exec(f[1]);
                    if (g) {
                        var h = g[1],
                        i = g[2],
                        j = g[3] || 0;
                        if (h && this.isSameDomain(h) && i) {
                            var k = this.guessAnonymousFunction(h, i, j);
                            a[b] = e.replace("{anonymous}", k)
                        }
                    }
                }
            }
            return a
        },
        guessAnonymousFunction: function(a, b, c) {
            var d;
            try {
                d = this.findFunctionName(this.getSource(a), b)
            } catch(e) {
                d = "getSource failed with url: " + a + ", exception: " + e.toString()
            }
            return d
        },
        findFunctionName: function(a, b) {
            for (var c, d, e, f = /function\s+([^(]*?)\s*\(([^)]*)\)/,
            g = /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,
            h = /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,
            i = "",
            j = Math.min(b, 20), k = 0; j > k; ++k) if (c = a[b - k - 1], e = c.indexOf("//"), e >= 0 && (c = c.substr(0, e)), c) {
                if (i = c + i, d = g.exec(i), d && d[1]) return d[1];
                if (d = f.exec(i), d && d[1]) return d[1];
                if (d = h.exec(i), d && d[1]) return d[1]
            }
            return "(?)"
        }
    },
    a
}),
function(a, b, c) {
    "use strict";
    function d(a) {
        return function() {
            var b, c = arguments[0],
            c = "[" + (a ? a + ":": "") + c + "] http://errors.angularjs.org/1.2.32/" + (a ? a + "/": "") + c;
            for (b = 1; b < arguments.length; b++) c = c + (1 == b ? "?": "&") + "p" + (b - 1) + "=" + encodeURIComponent("function" == typeof arguments[b] ? arguments[b].toString().replace(/ \{[\s\S]*$/, "") : "undefined" == typeof arguments[b] ? "undefined": "string" != typeof arguments[b] ? JSON.stringify(arguments[b]) : arguments[b]);
            return Error(c)
        }
    }
    function e(a) {
        if (null == a || z(a)) return ! 1;
        var b = a.length;
        return 1 === a.nodeType && b ? !0 : u(a) || hc(a) || 0 === b || "number" == typeof b && b > 0 && b - 1 in a
    }
    function f(a, b, c) {
        var d;
        if (a) if (x(a)) for (d in a)"prototype" == d || "length" == d || "name" == d || a.hasOwnProperty && !a.hasOwnProperty(d) || b.call(c, a[d], d);
        else if (hc(a) || e(a)) for (d = 0; d < a.length; d++) b.call(c, a[d], d);
        else if (a.forEach && a.forEach !== f) a.forEach(b, c);
        else for (d in a) a.hasOwnProperty(d) && b.call(c, a[d], d);
        return a
    }
    function g(a) {
        var b, c = [];
        for (b in a) a.hasOwnProperty(b) && c.push(b);
        return c.sort()
    }
    function h(a, b, c) {
        for (var d = g(a), e = 0; e < d.length; e++) b.call(c, a[d[e]], d[e]);
        return d
    }
    function i(a) {
        return function(b, c) {
            a(c, b)
        }
    }
    function j() {
        for (var a, b = gc.length; b;) {
            if (b--, a = gc[b].charCodeAt(0), 57 == a) return gc[b] = "A",
            gc.join("");
            if (90 != a) return gc[b] = String.fromCharCode(a + 1),
            gc.join("");
            gc[b] = "0"
        }
        return gc.unshift("0"),
        gc.join("")
    }
    function k(a, b) {
        b ? a.$$hashKey = b: delete a.$$hashKey
    }
    function l(a) {
        var b = a.$$hashKey;
        return f(arguments,
        function(b) {
            b !== a && f(b,
            function(b, c) {
                a[c] = b
            })
        }),
        k(a, b),
        a
    }
    function m(a) {
        return parseInt(a, 10)
    }
    function n(a, b) {
        return l(new(l(function() {},
        {
            prototype: a
        })), b)
    }
    function o() {}
    function p(a) {
        return a
    }
    function q(a) {
        return function() {
            return a
        }
    }
    function r(a) {
        return "undefined" == typeof a
    }
    function s(a) {
        return "undefined" != typeof a
    }
    function t(a) {
        return null != a && "object" == typeof a
    }
    function u(a) {
        return "string" == typeof a
    }
    function v(a) {
        return "number" == typeof a
    }
    function w(a) {
        return "[object Date]" === dc.call(a)
    }
    function x(a) {
        return "function" == typeof a
    }
    function y(a) {
        return "[object RegExp]" === dc.call(a)
    }
    function z(a) {
        return a && a.document && a.location && a.alert && a.setInterval
    }
    function A(a) {
        return ! (!a || !(a.nodeName || a.prop && a.attr && a.find))
    }
    function B(a, b, c) {
        var d = [];
        return f(a,
        function(a, e, f) {
            d.push(b.call(c, a, e, f))
        }),
        d
    }
    function C(a, b) {
        if (a.indexOf) return a.indexOf(b);
        for (var c = 0; c < a.length; c++) if (b === a[c]) return c;
        return - 1
    }
    function D(a, b) {
        var c = C(a, b);
        return c >= 0 && a.splice(c, 1),
        b
    }
    function E(a, b, c, d) {
        if (z(a) || a && a.$evalAsync && a.$watch) throw ec("cpws");
        if (b) {
            if (a === b) throw ec("cpi");
            if (c = c || [], d = d || [], t(a)) {
                var e = C(c, a);
                if ( - 1 !== e) return d[e];
                c.push(a),
                d.push(b)
            }
            if (hc(a)) for (var g = b.length = 0; g < a.length; g++) e = E(a[g], null, c, d),
            t(a[g]) && (c.push(a[g]), d.push(e)),
            b.push(e);
            else {
                var h = b.$$hashKey;
                hc(b) ? b.length = 0 : f(b,
                function(a, c) {
                    delete b[c]
                });
                for (g in a) e = E(a[g], null, c, d),
                t(a[g]) && (c.push(a[g]), d.push(e)),
                b[g] = e;
                k(b, h)
            }
        } else(b = a) && (hc(a) ? b = E(a, [], c, d) : w(a) ? b = new Date(a.getTime()) : y(a) ? (b = RegExp(a.source, a.toString().match(/[^\/]*$/)[0]), b.lastIndex = a.lastIndex) : t(a) && (b = E(a, {},
        c, d)));
        return b
    }
    function F(a, b) {
        if (hc(a)) {
            b = b || [];
            for (var c = 0; c < a.length; c++) b[c] = a[c]
        } else if (t(a)) for (c in b = b || {},
        a) ! _b.call(a, c) || "$" === c.charAt(0) && "$" === c.charAt(1) || (b[c] = a[c]);
        return b || a
    }
    function G(a, b) {
        if (a === b) return ! 0;
        if (null === a || null === b) return ! 1;
        if (a !== a && b !== b) return ! 0;
        var d, e = typeof a;
        if (e == typeof b && "object" == e) {
            if (!hc(a)) {
                if (w(a)) return w(b) ? isNaN(a.getTime()) && isNaN(b.getTime()) || a.getTime() === b.getTime() : !1;
                if (y(a) && y(b)) return a.toString() == b.toString();
                if (a && a.$evalAsync && a.$watch || b && b.$evalAsync && b.$watch || z(a) || z(b) || hc(b)) return ! 1;
                e = {};
                for (d in a) if ("$" !== d.charAt(0) && !x(a[d])) {
                    if (!G(a[d], b[d])) return ! 1;
                    e[d] = !0
                }
                for (d in b) if (!e.hasOwnProperty(d) && "$" !== d.charAt(0) && b[d] !== c && !x(b[d])) return ! 1;
                return ! 0
            }
            if (!hc(b)) return ! 1;
            if ((e = a.length) == b.length) {
                for (d = 0; e > d; d++) if (!G(a[d], b[d])) return ! 1;
                return ! 0
            }
        }
        return ! 1
    }
    function H(a, b) {
        var c = 2 < arguments.length ? bc.call(arguments, 2) : [];
        return ! x(b) || b instanceof RegExp ? b: c.length ?
        function() {
            return arguments.length ? b.apply(a, c.concat(bc.call(arguments, 0))) : b.apply(a, c)
        }: function() {
            return arguments.length ? b.apply(a, arguments) : b.call(a)
        }
    }
    function I(a, d) {
        var e = d;
        return "string" == typeof a && "$" === a.charAt(0) ? e = c: z(d) ? e = "$WINDOW": d && b === d ? e = "$DOCUMENT": d && d.$evalAsync && d.$watch && (e = "$SCOPE"),
        e
    }
    function J(a, b) {
        return "undefined" == typeof a ? c: JSON.stringify(a, I, b ? "  ": null)
    }
    function K(a) {
        return u(a) ? JSON.parse(a) : a
    }
    function L(a) {
        return "function" == typeof a ? a = !0 : a && 0 !== a.length ? (a = $b("" + a), a = !("f" == a || "0" == a || "false" == a || "no" == a || "n" == a || "[]" == a)) : a = !1,
        a
    }
    function M(a) {
        a = Vb(a).clone();
        try {
            a.empty()
        } catch(b) {}
        var c = Vb("<div>").append(a).html();
        try {
            return 3 === a[0].nodeType ? $b(c) : c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,
            function(a, b) {
                return "<" + $b(b)
            })
        } catch(d) {
            return $b(c)
        }
    }
    function N(a) {
        try {
            return decodeURIComponent(a)
        } catch(b) {}
    }
    function O(a) {
        var b, c, d = {};
        return f((a || "").split("&"),
        function(a) {
            a && (b = a.replace(/\+/g, "%20").split("="), c = N(b[0]), s(c) && (a = s(b[1]) ? N(b[1]) : !0, _b.call(d, c) ? hc(d[c]) ? d[c].push(a) : d[c] = [d[c], a] : d[c] = a))
        }),
        d
    }
    function P(a) {
        var b = [];
        return f(a,
        function(a, c) {
            hc(a) ? f(a,
            function(a) {
                b.push(R(c, !0) + (!0 === a ? "": "=" + R(a, !0)))
            }) : b.push(R(c, !0) + (!0 === a ? "": "=" + R(a, !0)))
        }),
        b.length ? b.join("&") : ""
    }
    function Q(a) {
        return R(a, !0).replace(/%26/gi, "&").replace(/%3D/gi, "=").replace(/%2B/gi, "+")
    }
    function R(a, b) {
        return encodeURIComponent(a).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, b ? "%20": "+")
    }
    function S(a, c) {
        function d(a) {
            a && h.push(a)
        }
        var e, g, h = [a],
        i = ["ng:app", "ng-app", "x-ng-app", "data-ng-app"],
        j = /\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;
        f(i,
        function(c) {
            i[c] = !0,
            d(b.getElementById(c)),
            c = c.replace(":", "\\:"),
            a.querySelectorAll && (f(a.querySelectorAll("." + c), d), f(a.querySelectorAll("." + c + "\\:"), d), f(a.querySelectorAll("[" + c + "]"), d))
        }),
        f(h,
        function(a) {
            if (!e) {
                var b = j.exec(" " + a.className + " ");
                b ? (e = a, g = (b[2] || "").replace(/\s+/g, ",")) : f(a.attributes,
                function(b) { ! e && i[b.name] && (e = a, g = b.value)
                })
            }
        }),
        e && c(e, g ? [g] : [])
    }
    function T(c, d) {
        var e = function() {
            if (c = Vb(c), c.injector()) {
                var a = c[0] === b ? "document": M(c);
                throw ec("btstrpd", a.replace(/</, "&lt;").replace(/>/, "&gt;"))
            }
            return d = d || [],
            d.unshift(["$provide",
            function(a) {
                a.value("$rootElement", c)
            }]),
            d.unshift("ng"),
            a = va(d),
            a.invoke(["$rootScope", "$rootElement", "$compile", "$injector", "$animate",
            function(a, b, c, d, e) {
                a.$apply(function() {
                    b.data("$injector", d),
                    c(b)(a)
                })
            }]),
            a
        },
        g = /^NG_DEFER_BOOTSTRAP!/;
        return a && !g.test(a.name) ? e() : (a.name = a.name.replace(g, ""), void(fc.resumeBootstrap = function(a) {
            f(a,
            function(a) {
                d.push(a)
            }),
            e()
        }))
    }
    function U(a, b) {
        return b = b || "_",
        a.replace(kc,
        function(a, c) {
            return (c ? b: "") + a.toLowerCase()
        })
    }
    function V(a, b, c) {
        if (!a) throw ec("areq", b || "?", c || "required");
        return a
    }
    function W(a, b, c) {
        return c && hc(a) && (a = a[a.length - 1]),
        V(x(a), b, "not a function, got " + (a && "object" == typeof a ? a.constructor.name || "Object": typeof a)),
        a
    }
    function X(a, b) {
        if ("hasOwnProperty" === a) throw ec("badname", b)
    }
    function Y(a, b, c) {
        if (!b) return a;
        b = b.split(".");
        for (var d, e = a,
        f = b.length,
        g = 0; f > g; g++) d = b[g],
        a && (a = (e = a)[d]);
        return ! c && x(a) ? H(e, a) : a
    }
    function Z(a) {
        var b = a[0];
        if (a = a[a.length - 1], b === a) return Vb(b);
        var c = [b];
        do {
            if (b = b.nextSibling, !b) break;
            c.push(b)
        } while ( b !== a );
        return Vb(c)
    }
    function $(a) {
        var b = d("$injector"),
        c = d("ng");
        return a = a.angular || (a.angular = {}),
        a.$$minErr = a.$$minErr || d,
        a.module || (a.module = function() {
            var a = {};
            return function(d, e, f) {
                if ("hasOwnProperty" === d) throw c("badname", "module");
                return e && a.hasOwnProperty(d) && (a[d] = null),
                a[d] || (a[d] = function() {
                    function a(a, b, d) {
                        return function() {
                            return c[d || "push"]([a, b, arguments]),
                            i
                        }
                    }
                    if (!e) throw b("nomod", d);
                    var c = [],
                    g = [],
                    h = a("$injector", "invoke"),
                    i = {
                        _invokeQueue: c,
                        _runBlocks: g,
                        requires: e,
                        name: d,
                        provider: a("$provide", "provider"),
                        factory: a("$provide", "factory"),
                        service: a("$provide", "service"),
                        value: a("$provide", "value"),
                        constant: a("$provide", "constant", "unshift"),
                        animation: a("$animateProvider", "register"),
                        filter: a("$filterProvider", "register"),
                        controller: a("$controllerProvider", "register"),
                        directive: a("$compileProvider", "directive"),
                        config: h,
                        run: function(a) {
                            return g.push(a),
                            this
                        }
                    };
                    return f && h(f),
                    i
                } ())
            }
        } ())
    }
    function _(b) {
        l(b, {
            bootstrap: T,
            copy: E,
            extend: l,
            equals: G,
            element: Vb,
            forEach: f,
            injector: va,
            noop: o,
            bind: H,
            toJson: J,
            fromJson: K,
            identity: p,
            isUndefined: r,
            isDefined: s,
            isString: u,
            isFunction: x,
            isObject: t,
            isNumber: v,
            isElement: A,
            isArray: hc,
            version: lc,
            isDate: w,
            lowercase: $b,
            uppercase: ac,
            callbacks: {
                counter: 0
            },
            $$minErr: d,
            $$csp: jc
        }),
        Xb = $(a);
        try {
            Xb("ngLocale")
        } catch(c) {
            Xb("ngLocale", []).provider("$locale", Ra)
        }
        Xb("ng", ["ngLocale"], ["$provide",
        function(a) {
            a.provider({
                $$sanitizeUri: rb
            }),
            a.provider("$compile", Ca).directive({
                a: id,
                input: td,
                textarea: td,
                form: md,
                script: be,
                select: ee,
                style: ge,
                option: fe,
                ngBind: Fd,
                ngBindHtml: Hd,
                ngBindTemplate: Gd,
                ngClass: Id,
                ngClassEven: Kd,
                ngClassOdd: Jd,
                ngCloak: Ld,
                ngController: Md,
                ngForm: nd,
                ngHide: Xd,
                ngIf: Pd,
                ngInclude: Qd,
                ngInit: Sd,
                ngNonBindable: Td,
                ngPluralize: Ud,
                ngRepeat: Vd,
                ngShow: Wd,
                ngStyle: Yd,
                ngSwitch: Zd,
                ngSwitchWhen: $d,
                ngSwitchDefault: _d,
                ngOptions: de,
                ngTransclude: ae,
                ngModel: zd,
                ngList: Cd,
                ngChange: Ad,
                required: Bd,
                ngRequired: Bd,
                ngValue: Ed
            }).directive({
                ngInclude: Rd
            }).directive(jd).directive(Nd),
            a.provider({
                $anchorScroll: wa,
                $animate: Hc,
                $browser: za,
                $cacheFactory: Aa,
                $controller: Fa,
                $document: Ga,
                $exceptionHandler: Ha,
                $filter: Bb,
                $interpolate: Pa,
                $interval: Qa,
                $http: La,
                $httpBackend: Na,
                $location: cb,
                $log: db,
                $parse: mb,
                $rootScope: qb,
                $q: nb,
                $sce: vb,
                $sceDelegate: ub,
                $sniffer: wb,
                $templateCache: Ba,
                $timeout: xb,
                $window: Ab,
                $$rAF: pb,
                $$asyncCallback: xa
            })
        }])
    }
    function aa(a) {
        return a.replace(qc,
        function(a, b, c, d) {
            return d ? c.toUpperCase() : c
        }).replace(rc, "Moz$1")
    }
    function ba(a, b, c, d) {
        function e(a) {
            var e, g, h, i, j, k, l = c && a ? [this.filter(a)] : [this],
            m = b;
            if (!d || null != a) for (; l.length;) for (e = l.shift(), g = 0, h = e.length; h > g; g++) for (i = Vb(e[g]), m ? i.triggerHandler("$destroy") : m = !m, j = 0, i = (k = i.children()).length; i > j; j++) l.push(Wb(k[j]));
            return f.apply(this, arguments)
        }
        var f = Wb.fn[a],
        f = f.$original || f;
        e.$original = f,
        Wb.fn[a] = e
    }
    function ca(a) {
        if (a instanceof ca) return a;
        if (u(a) && (a = ic(a)), !(this instanceof ca)) {
            if (u(a) && "<" != a.charAt(0)) throw sc("nosel");
            return new ca(a)
        }
        if (u(a)) {
            var c = a;
            a = b;
            var d;
            if (d = tc.exec(c)) a = [a.createElement(d[1])];
            else {
                var e, f = a;
                if (a = f.createDocumentFragment(), d = [], uc.test(c)) {
                    for (f = a.appendChild(f.createElement("div")), e = (vc.exec(c) || ["", ""])[1].toLowerCase(), e = xc[e] || xc._default, f.innerHTML = "<div>&#160;</div>" + e[1] + c.replace(wc, "<$1></$2>") + e[2], f.removeChild(f.firstChild), c = e[0]; c--;) f = f.lastChild;
                    for (c = 0, e = f.childNodes.length; e > c; ++c) d.push(f.childNodes[c]);
                    f = a.firstChild,
                    f.textContent = ""
                } else d.push(f.createTextNode(c));
                a.textContent = "",
                a.innerHTML = "",
                a = d
            }
            ma(this, a),
            Vb(b.createDocumentFragment()).append(this)
        } else ma(this, a)
    }
    function da(a) {
        return a.cloneNode(!0)
    }
    function ea(a) {
        ga(a);
        var b = 0;
        for (a = a.childNodes || []; b < a.length; b++) ea(a[b])
    }
    function fa(a, b, c, d) {
        if (s(d)) throw sc("offargs");
        var e = ha(a, "events");
        ha(a, "handle") && (r(b) ? f(e,
        function(b, c) {
            pc(a, c, b),
            delete e[c]
        }) : f(b.split(" "),
        function(b) {
            r(c) ? (pc(a, b, e[b]), delete e[b]) : D(e[b] || [], c)
        }))
    }
    function ga(a, b) {
        var d = a.ng339,
        e = mc[d];
        e && (b ? delete mc[d].data[b] : (e.handle && (e.events.$destroy && e.handle({},
        "$destroy"), fa(a)), delete mc[d], a.ng339 = c))
    }
    function ha(a, b, c) {
        var d = a.ng339,
        d = mc[d || -1];
        return s(c) ? (d || (a.ng339 = d = ++nc, d = mc[d] = {}), void(d[b] = c)) : d && d[b]
    }
    function ia(a, b, c) {
        var d = ha(a, "data"),
        e = s(c),
        f = !e && s(b),
        g = f && !t(b);
        if (d || g || ha(a, "data", d = {}), e) d[b] = c;
        else {
            if (!f) return d;
            if (g) return d && d[b];
            l(d, b)
        }
    }
    function ja(a, b) {
        return a.getAttribute ? -1 < (" " + (a.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").indexOf(" " + b + " ") : !1
    }
    function ka(a, b) {
        b && a.setAttribute && f(b.split(" "),
        function(b) {
            a.setAttribute("class", ic((" " + (a.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").replace(" " + ic(b) + " ", " ")))
        })
    }
    function la(a, b) {
        if (b && a.setAttribute) {
            var c = (" " + (a.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ");
            f(b.split(" "),
            function(a) {
                a = ic(a),
                -1 === c.indexOf(" " + a + " ") && (c += a + " ")
            }),
            a.setAttribute("class", ic(c))
        }
    }
    function ma(a, b) {
        if (b) {
            b = b.nodeName || !s(b.length) || z(b) ? [b] : b;
            for (var c = 0; c < b.length; c++) a.push(b[c])
        }
    }
    function na(a, b) {
        return oa(a, "$" + (b || "ngController") + "Controller")
    }
    function oa(a, b, d) {
        for (9 == a.nodeType && (a = a.documentElement), b = hc(b) ? b: [b]; a;) {
            for (var e = 0,
            f = b.length; f > e; e++) if ((d = Vb.data(a, b[e])) !== c) return d;
            a = a.parentNode || 11 === a.nodeType && a.host
        }
    }
    function pa(a) {
        for (var b = 0,
        c = a.childNodes; b < c.length; b++) ea(c[b]);
        for (; a.firstChild;) a.removeChild(a.firstChild)
    }
    function qa(a, b) {
        var c = zc[b.toLowerCase()];
        return c && Ac[a.nodeName] && c
    }
    function ra(a, c) {
        var d = function(d, e) {
            if (d.preventDefault || (d.preventDefault = function() {
                d.returnValue = !1
            }), d.stopPropagation || (d.stopPropagation = function() {
                d.cancelBubble = !0
            }), d.target || (d.target = d.srcElement || b), r(d.defaultPrevented)) {
                var g = d.preventDefault;
                d.preventDefault = function() {
                    d.defaultPrevented = !0,
                    g.call(d)
                },
                d.defaultPrevented = !1
            }
            d.isDefaultPrevented = function() {
                return d.defaultPrevented || !1 === d.returnValue
            };
            var h = F(c[e || d.type] || []);
            f(h,
            function(b) {
                b.call(a, d)
            }),
            8 >= Ub ? (d.preventDefault = null, d.stopPropagation = null, d.isDefaultPrevented = null) : (delete d.preventDefault, delete d.stopPropagation, delete d.isDefaultPrevented)
        };
        return d.elem = a,
        d
    }
    function sa(a, b) {
        var d, e = typeof a;
        return "function" == e || "object" == e && null !== a ? "function" == typeof(d = a.$$hashKey) ? d = a.$$hashKey() : d === c && (d = a.$$hashKey = (b || j)()) : d = a,
        e + ":" + d
    }
    function ta(a, b) {
        if (b) {
            var c = 0;
            this.nextUid = function() {
                return++c
            }
        }
        f(a, this.put, this)
    }
    function ua(a) {
        var b, c;
        return "function" == typeof a ? (b = a.$inject) || (b = [], a.length && (c = a.toString().replace(Ec, ""), c = c.match(Bc), f(c[1].split(Cc),
        function(a) {
            a.replace(Dc,
            function(a, c, d) {
                b.push(d)
            })
        })), a.$inject = b) : hc(a) ? (c = a.length - 1, W(a[c], "fn"), b = a.slice(0, c)) : W(a, "fn", !0),
        b
    }
    function va(a) {
        function b(a) {
            return function(b, c) {
                return t(b) ? void f(b, i(a)) : a(b, c)
            }
        }
        function c(a, b) {
            if (X(a, "service"), (x(b) || hc(b)) && (b = n.instantiate(b)), !b.$get) throw Fc("pget", a);
            return m[a + j] = b
        }
        function d(a, b) {
            return c(a, {
                $get: b
            })
        }
        function e(a) {
            var b, c, d, g, h = [];
            return f(a,
            function(a) {
                if (!l.get(a)) {
                    l.put(a, !0);
                    try {
                        if (u(a)) for (b = Xb(a), h = h.concat(e(b.requires)).concat(b._runBlocks), c = b._invokeQueue, d = 0, g = c.length; g > d; d++) {
                            var f = c[d],
                            i = n.get(f[0]);
                            i[f[1]].apply(i, f[2])
                        } else x(a) ? h.push(n.invoke(a)) : hc(a) ? h.push(n.invoke(a)) : W(a, "module")
                    } catch(j) {
                        throw hc(a) && (a = a[a.length - 1]),
                        j.message && j.stack && -1 == j.stack.indexOf(j.message) && (j = j.message + "\n" + j.stack),
                        Fc("modulerr", a, j.stack || j.message || j);
                    }
                }
            }),
            h
        }
        function g(a, b) {
            function c(c) {
                if (a.hasOwnProperty(c)) {
                    if (a[c] === h) throw Fc("cdep", c + " <- " + k.join(" <- "));
                    return a[c]
                }
                try {
                    return k.unshift(c),
                    a[c] = h,
                    a[c] = b(c)
                } catch(d) {
                    throw a[c] === h && delete a[c],
                    d
                } finally {
                    k.shift()
                }
            }
            function d(a, b, d) {
                var e, f, g, h = [],
                i = ua(a);
                for (f = 0, e = i.length; e > f; f++) {
                    if (g = i[f], "string" != typeof g) throw Fc("itkn", g);
                    h.push(d && d.hasOwnProperty(g) ? d[g] : c(g))
                }
                return hc(a) && (a = a[e]),
                a.apply(b, h)
            }
            return {
                invoke: d,
                instantiate: function(a, b) {
                    var c, e = function() {};
                    return e.prototype = (hc(a) ? a[a.length - 1] : a).prototype,
                    e = new e,
                    c = d(a, e, b),
                    t(c) || x(c) ? c: e
                },
                get: c,
                annotate: ua,
                has: function(b) {
                    return m.hasOwnProperty(b + j) || a.hasOwnProperty(b)
                }
            }
        }
        var h = {},
        j = "Provider",
        k = [],
        l = new ta([], !0),
        m = {
            $provide: {
                provider: b(c),
                factory: b(d),
                service: b(function(a, b) {
                    return d(a, ["$injector",
                    function(a) {
                        return a.instantiate(b)
                    }])
                }),
                value: b(function(a, b) {
                    return d(a, q(b))
                }),
                constant: b(function(a, b) {
                    X(a, "constant"),
                    m[a] = b,
                    p[a] = b
                }),
                decorator: function(a, b) {
                    var c = n.get(a + j),
                    d = c.$get;
                    c.$get = function() {
                        var a = r.invoke(d, c);
                        return r.invoke(b, null, {
                            $delegate: a
                        })
                    }
                }
            }
        },
        n = m.$injector = g(m,
        function() {
            throw Fc("unpr", k.join(" <- "))
        }),
        p = {},
        r = p.$injector = g(p,
        function(a) {
            return a = n.get(a + j),
            r.invoke(a.$get, a)
        });
        return f(e(a),
        function(a) {
            r.invoke(a || o)
        }),
        r
    }
    function wa() {
        var a = !0;
        this.disableAutoScrolling = function() {
            a = !1
        },
        this.$get = ["$window", "$location", "$rootScope",
        function(b, c, d) {
            function e(a) {
                var b = null;
                return f(a,
                function(a) {
                    b || "a" !== $b(a.nodeName) || (b = a)
                }),
                b
            }
            function g() {
                var a, d = c.hash();
                d ? (a = h.getElementById(d)) ? a.scrollIntoView() : (a = e(h.getElementsByName(d))) ? a.scrollIntoView() : "top" === d && b.scrollTo(0, 0) : b.scrollTo(0, 0)
            }
            var h = b.document;
            return a && d.$watch(function() {
                return c.hash()
            },
            function() {
                d.$evalAsync(g)
            }),
            g
        }]
    }
    function xa() {
        this.$get = ["$$rAF", "$timeout",
        function(a, b) {
            return a.supported ?
            function(b) {
                return a(b)
            }: function(a) {
                return b(a, 0, !1)
            }
        }]
    }
    function ya(a, b, d, e) {
        function g(a) {
            try {
                a.apply(null, bc.call(arguments, 1))
            } finally {
                if (s--, 0 === s) for (; t.length;) try {
                    t.pop()()
                } catch(b) {
                    d.error(b)
                }
            }
        }
        function h(a, b) { !
            function c() {
                f(w,
                function(a) {
                    a()
                }),
                v = b(c, a)
            } ()
        }
        function i() {
            x != j.url() && (x = j.url(), f(A,
            function(a) {
                a(j.url())
            }))
        }
        var j = this,
        k = b[0],
        l = a.location,
        m = a.history,
        n = a.setTimeout,
        p = a.clearTimeout,
        q = {};
        j.isMock = !1;
        var s = 0,
        t = [];
        j.$$completeOutstandingRequest = g,
        j.$$incOutstandingRequestCount = function() {
            s++
        },
        j.notifyWhenNoOutstandingRequests = function(a) {
            f(w,
            function(a) {
                a()
            }),
            0 === s ? a() : t.push(a)
        };
        var v, w = [];
        j.addPollFn = function(a) {
            return r(v) && h(100, n),
            w.push(a),
            a
        };
        var x = l.href,
        y = b.find("base"),
        z = null;
        j.url = function(b, c) {
            if (l !== a.location && (l = a.location), m !== a.history && (m = a.history), !b) return z || l.href.replace(/%27/g, "'");
            if (x != b) {
                var d = x && Wa(x) === Wa(b);
                if (x = b, !d && e.history) c ? m.replaceState(null, "", b) : (m.pushState(null, "", b), y.attr("href", y.attr("href")));
                else if (d || (z = b), c) l.replace(b);
                else if (d) {
                    var f, d = l;
                    f = b.indexOf("#"),
                    f = -1 === f ? "": b.substr(f + 1),
                    d.hash = f
                } else l.href = b;
                return j
            }
        };
        var A = [],
        B = !1;
        j.onUrlChange = function(b) {
            return B || (e.history && Vb(a).on("popstate", i), e.hashchange ? Vb(a).on("hashchange", i) : j.addPollFn(i), B = !0),
            A.push(b),
            b
        },
        j.$$checkUrlChange = i,
        j.baseHref = function() {
            var a = y.attr("href");
            return a ? a.replace(/^(https?\:)?\/\/[^\/]*/, "") : ""
        };
        var C = {},
        D = "",
        E = j.baseHref();
        j.cookies = function(a, b) {
            var e, f, g, h;
            if (!a) {
                if (k.cookie !== D) for (D = k.cookie, e = D.split("; "), C = {},
                g = 0; g < e.length; g++) f = e[g],
                h = f.indexOf("="),
                h > 0 && (a = unescape(f.substring(0, h)), C[a] === c && (C[a] = unescape(f.substring(h + 1))));
                return C
            }
            b === c ? k.cookie = escape(a) + "=;path=" + E + ";expires=Thu, 01 Jan 1970 00:00:00 GMT": u(b) && (e = (k.cookie = escape(a) + "=" + escape(b) + ";path=" + E).length + 1, e > 4096 && d.warn("Cookie '" + a + "' possibly not set or overflowed because it was too large (" + e + " > 4096 bytes)!"))
        },
        j.defer = function(a, b) {
            var c;
            return s++,
            c = n(function() {
                delete q[c],
                g(a)
            },
            b || 0),
            q[c] = !0,
            c
        },
        j.defer.cancel = function(a) {
            return q[a] ? (delete q[a], p(a), g(o), !0) : !1
        }
    }
    function za() {
        this.$get = ["$window", "$log", "$sniffer", "$document",
        function(a, b, c, d) {
            return new ya(a, d, b, c)
        }]
    }
    function Aa() {
        this.$get = function() {
            function a(a, c) {
                function e(a) {
                    a != m && (n ? n == a && (n = a.n) : n = a, f(a.n, a.p), f(a, m), m = a, m.n = null)
                }
                function f(a, b) {
                    a != b && (a && (a.p = b), b && (b.n = a))
                }
                if (a in b) throw d("$cacheFactory")("iid", a);
                var g = 0,
                h = l({},
                c, {
                    id: a
                }),
                i = {},
                j = c && c.capacity || Number.MAX_VALUE,
                k = {},
                m = null,
                n = null;
                return b[a] = {
                    put: function(a, b) {
                        if (j < Number.MAX_VALUE) {
                            var c = k[a] || (k[a] = {
                                key: a
                            });
                            e(c)
                        }
                        return r(b) ? void 0 : (a in i || g++, i[a] = b, g > j && this.remove(n.key), b)
                    },
                    get: function(a) {
                        if (j < Number.MAX_VALUE) {
                            var b = k[a];
                            if (!b) return;
                            e(b)
                        }
                        return i[a]
                    },
                    remove: function(a) {
                        if (j < Number.MAX_VALUE) {
                            var b = k[a];
                            if (!b) return;
                            b == m && (m = b.p),
                            b == n && (n = b.n),
                            f(b.n, b.p),
                            delete k[a]
                        }
                        delete i[a],
                        g--
                    },
                    removeAll: function() {
                        i = {},
                        g = 0,
                        k = {},
                        m = n = null
                    },
                    destroy: function() {
                        k = h = i = null,
                        delete b[a]
                    },
                    info: function() {
                        return l({},
                        h, {
                            size: g
                        })
                    }
                }
            }
            var b = {};
            return a.info = function() {
                var a = {};
                return f(b,
                function(b, c) {
                    a[c] = b.info()
                }),
                a
            },
            a.get = function(a) {
                return b[a]
            },
            a
        }
    }
    function Ba() {
        this.$get = ["$cacheFactory",
        function(a) {
            return a("templates")
        }]
    }
    function Ca(a, d) {
        var e = {},
        g = "Directive",
        h = /^\s*directive\:\s*([\d\w_\-]+)\s+(.*)$/,
        j = /(([\d\w_\-]+)(?:\:([^;]+))?;?)/,
        k = /^(on[a-z]+|formaction)$/;
        this.directive = function m(b, c) {
            return X(b, "directive"),
            u(b) ? (V(c, "directiveFactory"), e.hasOwnProperty(b) || (e[b] = [], a.factory(b + g, ["$injector", "$exceptionHandler",
            function(a, c) {
                var d = [];
                return f(e[b],
                function(e, f) {
                    try {
                        var g = a.invoke(e);
                        x(g) ? g = {
                            compile: q(g)
                        }: !g.compile && g.link && (g.compile = q(g.link)),
                        g.priority = g.priority || 0,
                        g.index = f,
                        g.name = g.name || b,
                        g.require = g.require || g.controller && g.name,
                        g.restrict = g.restrict || "A",
                        d.push(g)
                    } catch(h) {
                        c(h)
                    }
                }),
                d
            }])), e[b].push(c)) : f(b, i(m)),
            this
        },
        this.aHrefSanitizationWhitelist = function(a) {
            return s(a) ? (d.aHrefSanitizationWhitelist(a), this) : d.aHrefSanitizationWhitelist()
        },
        this.imgSrcSanitizationWhitelist = function(a) {
            return s(a) ? (d.imgSrcSanitizationWhitelist(a), this) : d.imgSrcSanitizationWhitelist()
        },
        this.$get = ["$injector", "$interpolate", "$exceptionHandler", "$http", "$templateCache", "$parse", "$controller", "$rootScope", "$document", "$sce", "$animate", "$$sanitizeUri",
        function(a, d, i, m, o, q, r, s, v, w, y, z) {
            function A(a, b, c, d, e) {
                a instanceof Vb || (a = Vb(a)),
                f(a,
                function(b, c) {
                    3 == b.nodeType && b.nodeValue.match(/\S+/) && (a[c] = Vb(b).wrap("<span></span>").parent()[0])
                });
                var g = C(a, b, a, c, d, e);
                return B(a, "ng-scope"),
                function(b, c, d, e) {
                    V(b, "scope");
                    var h = c ? yc.clone.call(a) : a;
                    f(d,
                    function(a, b) {
                        h.data("$" + b + "Controller", a)
                    }),
                    d = 0;
                    for (var i = h.length; i > d; d++) {
                        var j = h[d].nodeType;
                        1 !== j && 9 !== j || h.eq(d).data("$scope", b)
                    }
                    return c && c(h, b),
                    g && g(b, h, h, e),
                    h
                }
            }
            function B(a, b) {
                try {
                    a.addClass(b)
                } catch(c) {}
            }
            function C(a, b, d, e, f, g) {
                function h(a, d, e, f) {
                    var g, h, i, j, k, l, n;
                    g = d.length;
                    var o = Array(g);
                    for (j = 0; g > j; j++) o[j] = d[j];
                    for (l = j = 0, k = m.length; k > j; l++) h = o[l],
                    d = m[j++],
                    g = m[j++],
                    d ? (d.scope ? (i = a.$new(), Vb.data(h, "$scope", i)) : i = a, n = d.transcludeOnThisElement ? D(a, d.transclude, f) : !d.templateOnThisElement && f ? f: !f && b ? D(a, b) : null, d(g, i, h, e, n)) : g && g(a, h.childNodes, c, f)
                }
                for (var i, j, k, l, m = [], n = 0; n < a.length; n++) i = new Y,
                j = E(a[n], [], i, 0 === n ? e: c, f),
                (g = j.length ? J(j, a[n], i, b, d, null, [], [], g) : null) && g.scope && B(i.$$element, "ng-scope"),
                i = g && g.terminal || !(k = a[n].childNodes) || !k.length ? null: C(k, g ? (g.transcludeOnThisElement || !g.templateOnThisElement) && g.transclude: b),
                m.push(g, i),
                l = l || g || i,
                g = null;
                return l ? h: null
            }
            function D(a, b, c) {
                return function(d, e, f) {
                    var g = !1;
                    return d || (d = a.$new(), g = d.$$transcluded = !0),
                    e = b(d, e, f, c),
                    g && e.on("$destroy",
                    function() {
                        d.$destroy()
                    }),
                    e
                }
            }
            function E(a, b, c, d, e) {
                var f, g = c.$attr;
                switch (a.nodeType) {
                case 1:
                    f = Yb(a).toLowerCase(),
                    L(b, Da(f), "E", d, e);
                    for (var i, k, l, m, n = a.attributes,
                    o = 0,
                    p = n && n.length; p > o; o++) {
                        var q = !1,
                        r = !1;
                        if (i = n[o], !Ub || Ub >= 8 || i.specified) {
                            k = i.name,
                            l = ic(i.value),
                            i = Da(k),
                            (m = aa.test(i)) && (k = U(i.substr(6), "-"));
                            var s = i.replace(/(Start|End)$/, "");
                            i === s + "Start" && (q = k, r = k.substr(0, k.length - 5) + "end", k = k.substr(0, k.length - 6)),
                            i = Da(k.toLowerCase()),
                            g[i] = k,
                            (m || !c.hasOwnProperty(i)) && (c[i] = l, qa(a, i) && (c[i] = !0)),
                            T(a, b, l, i),
                            L(b, i, "A", d, e, q, r)
                        }
                    }
                    if ("input" === f && "hidden" === a.getAttribute("type") && a.setAttribute("autocomplete", "off"), a = a.className, u(a) && "" !== a) for (; f = j.exec(a);) i = Da(f[2]),
                    L(b, i, "C", d, e) && (c[i] = ic(f[3])),
                    a = a.substr(f.index + f[0].length);
                    break;
                case 3:
                    if (11 === Ub) for (; a.parentNode && a.nextSibling && 3 === a.nextSibling.nodeType;) a.nodeValue += a.nextSibling.nodeValue,
                    a.parentNode.removeChild(a.nextSibling);
                    R(b, a.nodeValue);
                    break;
                case 8:
                    try { (f = h.exec(a.nodeValue)) && (i = Da(f[1]), L(b, i, "M", d, e) && (c[i] = ic(f[2])))
                    } catch(t) {}
                }
                return b.sort(P),
                b
            }
            function H(a, b, c) {
                var d = [],
                e = 0;
                if (b && a.hasAttribute && a.hasAttribute(b)) {
                    do {
                        if (!a) throw Ic("uterdir", b, c);
                        1 == a.nodeType && (a.hasAttribute(b) && e++, a.hasAttribute(c) && e--), d.push(a), a = a.nextSibling
                    } while ( e > 0 )
                } else d.push(a);
                return Vb(d)
            }
            function I(a, b, c) {
                return function(d, e, f, g, h) {
                    return e = H(e[0], b, c),
                    a(d, e, f, g, h)
                }
            }
            function J(a, e, g, h, j, k, l, m, n) {
                function o(a, b, c, d) {
                    a && (c && (a = I(a, c, d)), a.require = w.require, a.directiveName = y, (L === w || w.$$isolateScope) && (a = X(a, {
                        isolateScope: !0
                    })), l.push(a)),
                    b && (c && (b = I(b, c, d)), b.require = w.require, b.directiveName = y, (L === w || w.$$isolateScope) && (b = X(b, {
                        isolateScope: !0
                    })), m.push(b))
                }
                function p(a, b, c, d) {
                    var e, g = "data",
                    h = !1;
                    if (u(b)) {
                        for (;
                        "^" == (e = b.charAt(0)) || "?" == e;) b = b.substr(1),
                        "^" == e && (g = "inheritedData"),
                        h = h || "?" == e;
                        if (e = null, d && "data" === g && (e = d[b]), e = e || c[g]("$" + b + "Controller"), !e && !h) throw Ic("ctreq", b, a)
                    } else hc(b) && (e = [], f(b,
                    function(b) {
                        e.push(p(a, b, c, d))
                    }));
                    return e
                }
                function s(a, b, h, j, k) {
                    function n(a, b) {
                        var d;
                        return 2 > arguments.length && (b = a, a = c),
                        U && (d = y),
                        k(a, b, d)
                    }
                    var o, s, t, u, v, w, x, y = {};
                    if (o = e === h ? g: F(g, new Y(Vb(h), g.$attr)), s = o.$$element, L) {
                        var z = /^\s*([@=&])(\??)\s*(\w*)\s*$/;
                        w = b.$new(!0),
                        !P || P !== L && P !== L.$$originalDirective ? s.data("$isolateScopeNoTemplate", w) : s.data("$isolateScope", w),
                        B(s, "ng-isolate-scope"),
                        f(L.scope,
                        function(a, c) {
                            var e, f, g, h, i = a.match(z) || [],
                            j = i[3] || c,
                            k = "?" == i[2],
                            i = i[1];
                            switch (w.$$isolateBindings[c] = i + j, i) {
                            case "@":
                                o.$observe(j,
                                function(a) {
                                    w[c] = a
                                }),
                                o.$$observers[j].$$scope = b,
                                o[j] && (w[c] = d(o[j])(b));
                                break;
                            case "=":
                                if (k && !o[j]) break;
                                f = q(o[j]),
                                h = f.literal ? G: function(a, b) {
                                    return a === b || a !== a && b !== b
                                },
                                g = f.assign ||
                                function() {
                                    throw e = w[c] = f(b),
                                    Ic("nonassign", o[j], L.name)
                                },
                                e = w[c] = f(b),
                                w.$watch(function() {
                                    var a = f(b);
                                    return h(a, w[c]) || (h(a, e) ? g(b, a = w[c]) : w[c] = a),
                                    e = a
                                },
                                null, f.literal);
                                break;
                            case "&":
                                f = q(o[j]),
                                w[c] = function(a) {
                                    return f(b, a)
                                };
                                break;
                            default:
                                throw Ic("iscp", L.name, c, a)
                            }
                        })
                    }
                    for (x = k && n, J && f(J,
                    function(a) {
                        var c, d = {
                            $scope: a === L || a.$$isolateScope ? w: b,
                            $element: s,
                            $attrs: o,
                            $transclude: x
                        };
                        v = a.controller,
                        "@" == v && (v = o[a.name]),
                        c = r(v, d),
                        y[a.name] = c,
                        U || s.data("$" + a.name + "Controller", c),
                        a.controllerAs && (d.$scope[a.controllerAs] = c)
                    }), j = 0, t = l.length; t > j; j++) try { (u = l[j])(u.isolateScope ? w: b, s, o, u.require && p(u.directiveName, u.require, s, y), x)
                    } catch(A) {
                        i(A, M(s))
                    }
                    for (j = b, L && (L.template || null === L.templateUrl) && (j = w), a && a(j, h.childNodes, c, k), j = m.length - 1; j >= 0; j--) try { (u = m[j])(u.isolateScope ? w: b, s, o, u.require && p(u.directiveName, u.require, s, y), x)
                    } catch(C) {
                        i(C, M(s))
                    }
                }
                n = n || {};
                for (var v, w, y, z, C, D = -Number.MAX_VALUE,
                J = n.controllerDirectives,
                L = n.newIsolateScopeDirective,
                P = n.templateDirective,
                R = n.nonTlbTranscludeDirective,
                S = !1,
                T = !1,
                U = n.hasElementTranscludeDirective,
                V = g.$$element = Vb(e), Z = h, $ = 0, aa = a.length; aa > $; $++) {
                    w = a[$];
                    var ba = w.$$start,
                    ca = w.$$end;
                    if (ba && (V = H(e, ba, ca)), z = c, D > w.priority) break;
                    if ((z = w.scope) && (v = v || w, w.templateUrl || (Q("new/isolated scope", L, w, V), t(z) && (L = w))), y = w.name, !w.templateUrl && w.controller && (z = w.controller, J = J || {},
                    Q("'" + y + "' controller", J[y], w, V), J[y] = w), (z = w.transclude) && (S = !0, w.$$tlb || (Q("transclusion", R, w, V), R = w), "element" == z ? (U = !0, D = w.priority, z = V, V = g.$$element = Vb(b.createComment(" " + y + ": " + g[y] + " ")), e = V[0], W(j, bc.call(z, 0), e), Z = A(z, h, D, k && k.name, {
                        nonTlbTranscludeDirective: R
                    })) : (z = Vb(da(e)).contents(), V.empty(), Z = A(z, h))), w.template) if (T = !0, Q("template", P, w, V), P = w, z = x(w.template) ? w.template(V, g) : w.template, z = _(z), w.replace) {
                        if (k = w, z = uc.test(z) ? Vb(ic(z)) : [], e = z[0], 1 != z.length || 1 !== e.nodeType) throw Ic("tplrt", y, "");
                        W(j, V, e),
                        aa = {
                            $attr: {}
                        },
                        z = E(e, [], aa);
                        var ea = a.splice($ + 1, a.length - ($ + 1));
                        L && K(z),
                        a = a.concat(z).concat(ea),
                        N(g, aa),
                        aa = a.length
                    } else V.html(z);
                    if (w.templateUrl) T = !0,
                    Q("template", P, w, V),
                    P = w,
                    w.replace && (k = w),
                    s = O(a.splice($, a.length - $), V, g, j, S && Z, l, m, {
                        controllerDirectives: J,
                        newIsolateScopeDirective: L,
                        templateDirective: P,
                        nonTlbTranscludeDirective: R
                    }),
                    aa = a.length;
                    else if (w.compile) try {
                        C = w.compile(V, g, Z),
                        x(C) ? o(null, C, ba, ca) : C && o(C.pre, C.post, ba, ca)
                    } catch(fa) {
                        i(fa, M(V))
                    }
                    w.terminal && (s.terminal = !0, D = Math.max(D, w.priority))
                }
                return s.scope = v && !0 === v.scope,
                s.transcludeOnThisElement = S,
                s.templateOnThisElement = T,
                s.transclude = Z,
                n.hasElementTranscludeDirective = U,
                s
            }
            function K(a) {
                for (var b = 0,
                c = a.length; c > b; b++) a[b] = n(a[b], {
                    $$isolateScope: !0
                })
            }
            function L(b, d, f, h, j, k, l) {
                if (d === j) return null;
                if (j = null, e.hasOwnProperty(d)) {
                    var m;
                    d = a.get(d + g);
                    for (var o = 0,
                    p = d.length; p > o; o++) try {
                        m = d[o],
                        (h === c || h > m.priority) && -1 != m.restrict.indexOf(f) && (k && (m = n(m, {
                            $$start: k,
                            $$end: l
                        })), b.push(m), j = m)
                    } catch(q) {
                        i(q)
                    }
                }
                return j
            }
            function N(a, b) {
                var c = b.$attr,
                d = a.$attr,
                e = a.$$element;
                f(a,
                function(d, e) {
                    "$" != e.charAt(0) && (b[e] && b[e] !== d && (d += ("style" === e ? ";": " ") + b[e]), a.$set(e, d, !0, c[e]))
                }),
                f(b,
                function(b, f) {
                    "class" == f ? (B(e, b), a["class"] = (a["class"] ? a["class"] + " ": "") + b) : "style" == f ? (e.attr("style", e.attr("style") + ";" + b), a.style = (a.style ? a.style + ";": "") + b) : "$" == f.charAt(0) || a.hasOwnProperty(f) || (a[f] = b, d[f] = c[f])
                })
            }
            function O(a, b, c, d, e, g, h, i) {
                var j, k, n = [],
                p = b[0],
                q = a.shift(),
                r = l({},
                q, {
                    templateUrl: null,
                    transclude: null,
                    replace: null,
                    $$originalDirective: q
                }),
                s = x(q.templateUrl) ? q.templateUrl(b, c) : q.templateUrl;
                return b.empty(),
                m.get(w.getTrustedResourceUrl(s), {
                    cache: o
                }).success(function(l) {
                    var m, o;
                    if (l = _(l), q.replace) {
                        if (l = uc.test(l) ? Vb(ic(l)) : [], m = l[0], 1 != l.length || 1 !== m.nodeType) throw Ic("tplrt", q.name, s);
                        l = {
                            $attr: {}
                        },
                        W(d, b, m);
                        var u = E(m, [], l);
                        t(q.scope) && K(u),
                        a = u.concat(a),
                        N(c, l)
                    } else m = p,
                    b.html(l);
                    for (a.unshift(r), j = J(a, m, c, e, b, q, g, h, i), f(d,
                    function(a, c) {
                        a == m && (d[c] = b[0])
                    }), k = C(b[0].childNodes, e); n.length;) {
                        l = n.shift(),
                        o = n.shift();
                        var v = n.shift(),
                        w = n.shift(),
                        u = b[0];
                        if (o !== p) {
                            var x = o.className;
                            i.hasElementTranscludeDirective && q.replace || (u = da(m)),
                            W(v, Vb(o), u),
                            B(Vb(u), x)
                        }
                        o = j.transcludeOnThisElement ? D(l, j.transclude, w) : w,
                        j(k, l, u, d, o)
                    }
                    n = null
                }).error(function(a, b, c, d) {
                    throw Ic("tpload", d.url)
                }),
                function(a, b, c, d, e) {
                    a = e,
                    n ? (n.push(b), n.push(c), n.push(d), n.push(a)) : (j.transcludeOnThisElement && (a = D(b, j.transclude, e)), j(k, b, c, d, a))
                }
            }
            function P(a, b) {
                var c = b.priority - a.priority;
                return 0 !== c ? c: a.name !== b.name ? a.name < b.name ? -1 : 1 : a.index - b.index
            }
            function Q(a, b, c, d) {
                if (b) throw Ic("multidir", b.name, c.name, a, M(d))
            }
            function R(a, b) {
                var c = d(b, !0);
                c && a.push({
                    priority: 0,
                    compile: function(a) {
                        var b = a.parent().length;
                        return b && B(a.parent(), "ng-binding"),
                        function(a, d) {
                            var e = d.parent(),
                            f = e.data("$binding") || [];
                            f.push(c),
                            e.data("$binding", f),
                            b || B(e, "ng-binding"),
                            a.$watch(c,
                            function(a) {
                                d[0].nodeValue = a
                            })
                        }
                    }
                })
            }
            function S(a, b) {
                if ("srcdoc" == b) return w.HTML;
                var c = Yb(a);
                return "xlinkHref" == b || "FORM" == c && "action" == b || "LINK" == c && "href" == b || "IMG" != c && ("src" == b || "ngSrc" == b) ? w.RESOURCE_URL: void 0
            }
            function T(a, b, c, e) {
                var f = d(c, !0);
                if (f) {
                    if ("multiple" === e && "SELECT" === Yb(a)) throw Ic("selmulti", M(a));
                    b.push({
                        priority: 100,
                        compile: function() {
                            return {
                                pre: function(b, c, g) {
                                    if (c = g.$$observers || (g.$$observers = {}), k.test(e)) throw Ic("nodomevents"); (f = d(g[e], !0, S(a, e))) && (g[e] = f(b), (c[e] || (c[e] = [])).$$inter = !0, (g.$$observers && g.$$observers[e].$$scope || b).$watch(f,
                                    function(a, b) {
                                        "class" === e && a != b ? g.$updateClass(a, b) : g.$set(e, a)
                                    }))
                                }
                            }
                        }
                    })
                }
            }
            function W(a, c, d) {
                var e, f, g = c[0],
                h = c.length,
                i = g.parentNode;
                if (a) for (e = 0, f = a.length; f > e; e++) if (a[e] == g) {
                    a[e++] = d,
                    f = e + h - 1;
                    for (var j = a.length; j > e; e++, f++) j > f ? a[e] = a[f] : delete a[e];
                    a.length -= h - 1;
                    break
                }
                for (i && i.replaceChild(d, g), a = b.createDocumentFragment(), a.appendChild(g), d[Vb.expando] = g[Vb.expando], g = 1, h = c.length; h > g; g++) i = c[g],
                Vb(i).remove(),
                a.appendChild(i),
                delete c[g];
                c[0] = d,
                c.length = 1
            }
            function X(a, b) {
                return l(function() {
                    return a.apply(null, arguments)
                },
                a, b)
            }
            var Y = function(a, b) {
                this.$$element = a,
                this.$attr = b || {}
            };
            Y.prototype = {
                $normalize: Da,
                $addClass: function(a) {
                    a && 0 < a.length && y.addClass(this.$$element, a)
                },
                $removeClass: function(a) {
                    a && 0 < a.length && y.removeClass(this.$$element, a)
                },
                $updateClass: function(a, b) {
                    var c = Ea(a, b),
                    d = Ea(b, a);
                    0 === c.length ? y.removeClass(this.$$element, d) : 0 === d.length ? y.addClass(this.$$element, c) : y.setClass(this.$$element, c, d)
                },
                $set: function(a, b, d, e) {
                    var g = qa(this.$$element[0], a);
                    g && (this.$$element.prop(a, b), e = g),
                    this[a] = b,
                    e ? this.$attr[a] = e: (e = this.$attr[a]) || (this.$attr[a] = e = U(a, "-")),
                    g = Yb(this.$$element).toUpperCase(),
                    ("A" === g && ("href" === a || "xlinkHref" === a) || "IMG" === g && "src" === a) && (this[a] = b = z(b, "src" === a)),
                    !1 !== d && (null === b || b === c ? this.$$element.removeAttr(e) : this.$$element.attr(e, b)),
                    (d = this.$$observers) && f(d[a],
                    function(a) {
                        try {
                            a(b)
                        } catch(c) {
                            i(c)
                        }
                    })
                },
                $observe: function(a, b) {
                    var c = this,
                    d = c.$$observers || (c.$$observers = {}),
                    e = d[a] || (d[a] = []);
                    return e.push(b),
                    s.$evalAsync(function() {
                        e.$$inter || b(c[a])
                    }),
                    b
                }
            };
            var Z = d.startSymbol(),
            $ = d.endSymbol(),
            _ = "{{" == Z || "}}" == $ ? p: function(a) {
                return a.replace(/\{\{/g, Z).replace(/}}/g, $)
            },
            aa = /^ngAttr[A-Z]/;
            return A
        }]
    }
    function Da(a) {
        return aa(a.replace(Jc, ""))
    }
    function Ea(a, b) {
        var c = "",
        d = a.split(/\s+/),
        e = b.split(/\s+/),
        f = 0;
        a: for (; f < d.length; f++) {
            for (var g = d[f], h = 0; h < e.length; h++) if (g == e[h]) continue a;
            c += (0 < c.length ? " ": "") + g
        }
        return c
    }
    function Fa() {
        var a = {},
        b = /^(\S+)(\s+as\s+(\w+))?$/;
        this.register = function(b, c) {
            X(b, "controller"),
            t(b) ? l(a, b) : a[b] = c
        },
        this.$get = ["$injector", "$window",
        function(c, e) {
            return function(f, g) {
                var h, i, j;
                if (u(f) && (h = f.match(b), i = h[1], j = h[3], f = a.hasOwnProperty(i) ? a[i] : Y(g.$scope, i, !0) || Y(e, i, !0), W(f, i, !0)), h = c.instantiate(f, g), j) {
                    if (!g || "object" != typeof g.$scope) throw d("$controller")("noscp", i || f.name, j);
                    g.$scope[j] = h
                }
                return h
            }
        }]
    }
    function Ga() {
        this.$get = ["$window",
        function(a) {
            return Vb(a.document)
        }]
    }
    function Ha() {
        this.$get = ["$log",
        function(a) {
            return function(b, c) {
                a.error.apply(a, arguments)
            }
        }]
    }
    function Ia(a) {
        var b, c, d, e = {};
        return a ? (f(a.split("\n"),
        function(a) {
            d = a.indexOf(":"),
            b = $b(ic(a.substr(0, d))),
            c = ic(a.substr(d + 1)),
            b && (e[b] = e[b] ? e[b] + ", " + c: c)
        }), e) : e
    }
    function Ja(a) {
        var b = t(a) ? a: c;
        return function(c) {
            return b || (b = Ia(a)),
            c ? b[$b(c)] || null: b
        }
    }
    function Ka(a, b, c) {
        return x(c) ? c(a, b) : (f(c,
        function(c) {
            a = c(a, b)
        }), a)
    }
    function La() {
        var a = /^\s*(\[|\{[^\{])/,
        b = /[\}\]]\s*$/,
        d = /^\)\]\}',?\n/,
        e = {
            "Content-Type": "application/json;charset=utf-8"
        },
        g = this.defaults = {
            transformResponse: [function(c) {
                return u(c) && (c = c.replace(d, ""), a.test(c) && b.test(c) && (c = K(c))),
                c
            }],
            transformRequest: [function(a) {
                return t(a) && "[object File]" !== dc.call(a) && "[object Blob]" !== dc.call(a) ? J(a) : a
            }],
            headers: {
                common: {
                    Accept: "application/json, text/plain, */*"
                },
                post: F(e),
                put: F(e),
                patch: F(e)
            },
            xsrfCookieName: "XSRF-TOKEN",
            xsrfHeaderName: "X-XSRF-TOKEN"
        },
        i = this.interceptors = [],
        j = this.responseInterceptors = [];
        this.$get = ["$httpBackend", "$browser", "$cacheFactory", "$rootScope", "$q", "$injector",
        function(a, b, d, e, k, m) {
            function n(a) {
                function b(a) {
                    var b = l({},
                    a, {
                        data: Ka(a.data, a.headers, d.transformResponse)
                    });
                    return 200 <= a.status && 300 > a.status ? b: k.reject(b)
                }
                var d = {
                    method: "get",
                    transformRequest: g.transformRequest,
                    transformResponse: g.transformResponse
                },
                e = function(a) {
                    var b, c, d = g.headers,
                    e = l({},
                    a.headers),
                    d = l({},
                    d.common, d[$b(a.method)]);
                    a: for (b in d) {
                        a = $b(b);
                        for (c in e) if ($b(c) === a) continue a;
                        e[b] = d[b]
                    }
                    return function(a) {
                        var b;
                        f(a,
                        function(c, d) {
                            x(c) && (b = c(), null != b ? a[d] = b: delete a[d])
                        })
                    } (e),
                    e
                } (a);
                l(d, a),
                d.headers = e,
                d.method = ac(d.method);
                var h = [function(a) {
                    e = a.headers;
                    var c = Ka(a.data, Ja(e), a.transformRequest);
                    return r(c) && f(e,
                    function(a, b) {
                        "content-type" === $b(b) && delete e[b]
                    }),
                    r(a.withCredentials) && !r(g.withCredentials) && (a.withCredentials = g.withCredentials),
                    o(a, c, e).then(b, b)
                },
                c],
                i = k.when(d);
                for (f(v,
                function(a) { (a.request || a.requestError) && h.unshift(a.request, a.requestError),
                    (a.response || a.responseError) && h.push(a.response, a.responseError)
                }); h.length;) {
                    a = h.shift();
                    var j = h.shift(),
                    i = i.then(a, j)
                }
                return i.success = function(a) {
                    return i.then(function(b) {
                        a(b.data, b.status, b.headers, d)
                    }),
                    i
                },
                i.error = function(a) {
                    return i.then(null,
                    function(b) {
                        a(b.data, b.status, b.headers, d)
                    }),
                    i
                },
                i
            }
            function o(d, f, h) {
                function i(a, b, c, d) {
                    m && (a >= 200 && 300 > a ? m.put(w, [a, b, Ia(c), d]) : m.remove(w)),
                    j(b, a, c, d),
                    e.$$phase || e.$apply()
                }
                function j(a, b, c, e) {
                    b = Math.max(b, 0),
                    (b >= 200 && 300 > b ? u.resolve: u.reject)({
                        data: a,
                        status: b,
                        headers: Ja(c),
                        config: d,
                        statusText: e
                    })
                }
                function l() {
                    var a = C(n.pendingRequests, d); - 1 !== a && n.pendingRequests.splice(a, 1)
                }
                var m, o, u = k.defer(),
                v = u.promise,
                w = p(d.url, d.params);
                if (n.pendingRequests.push(d), v.then(l, l), !d.cache && !g.cache || !1 === d.cache || "GET" !== d.method && "JSONP" !== d.method || (m = t(d.cache) ? d.cache: t(g.cache) ? g.cache: q), m) if (o = m.get(w), s(o)) {
                    if (o && x(o.then)) return o.then(l, l),
                    o;
                    hc(o) ? j(o[1], o[0], F(o[2]), o[3]) : j(o, 200, {},
                    "OK")
                } else m.put(w, v);
                return r(o) && ((o = zb(d.url) ? b.cookies()[d.xsrfCookieName || g.xsrfCookieName] : c) && (h[d.xsrfHeaderName || g.xsrfHeaderName] = o), a(d.method, w, f, i, h, d.timeout, d.withCredentials, d.responseType)),
                v
            }
            function p(a, b) {
                if (!b) return a;
                var c = [];
                return h(b,
                function(a, b) {
                    null === a || r(a) || (hc(a) || (a = [a]), f(a,
                    function(a) {
                        t(a) && (a = w(a) ? a.toISOString() : J(a)),
                        c.push(R(b) + "=" + R(a))
                    }))
                }),
                0 < c.length && (a += ( - 1 == a.indexOf("?") ? "?": "&") + c.join("&")),
                a
            }
            var q = d("$http"),
            v = [];
            return f(i,
            function(a) {
                v.unshift(u(a) ? m.get(a) : m.invoke(a))
            }),
            f(j,
            function(a, b) {
                var c = u(a) ? m.get(a) : m.invoke(a);
                v.splice(b, 0, {
                    response: function(a) {
                        return c(k.when(a))
                    },
                    responseError: function(a) {
                        return c(k.reject(a))
                    }
                })
            }),
            n.pendingRequests = [],
            function(a) {
                f(arguments,
                function(a) {
                    n[a] = function(b, c) {
                        return n(l(c || {},
                        {
                            method: a,
                            url: b
                        }))
                    }
                })
            } ("get", "delete", "head", "jsonp"),
            function(a) {
                f(arguments,
                function(a) {
                    n[a] = function(b, c, d) {
                        return n(l(d || {},
                        {
                            method: a,
                            url: b,
                            data: c
                        }))
                    }
                })
            } ("post", "put", "patch"),
            n.defaults = g,
            n
        }]
    }
    function Ma(b) {
        if (8 >= Ub && (!b.match(/^(get|post|head|put|delete|options)$/i) || !a.XMLHttpRequest)) return new a.ActiveXObject("Microsoft.XMLHTTP");
        if (a.XMLHttpRequest) return new a.XMLHttpRequest;
        throw d("$httpBackend")("noxhr")
    }
    function Na() {
        this.$get = ["$browser", "$window", "$document",
        function(a, b, c) {
            return Oa(a, Ma, a.defer, b.angular.callbacks, c[0])
        }]
    }
    function Oa(a, b, c, d, e) {
        function g(a, b, c) {
            var f = e.createElement("script"),
            g = null;
            return f.type = "text/javascript",
            f.src = a,
            f.async = !0,
            g = function(a) {
                pc(f, "load", g),
                pc(f, "error", g),
                e.body.removeChild(f),
                f = null;
                var h = -1,
                i = "unknown";
                a && ("load" !== a.type || d[b].called || (a = {
                    type: "error"
                }), i = a.type, h = "error" === a.type ? 404 : 200),
                c && c(h, i)
            },
            oc(f, "load", g),
            oc(f, "error", g),
            8 >= Ub && (f.onreadystatechange = function() {
                u(f.readyState) && /loaded|complete/.test(f.readyState) && (f.onreadystatechange = null, g({
                    type: "load"
                }))
            }),
            e.body.appendChild(f),
            g
        }
        var h = -1;
        return function(e, i, j, k, l, m, n, p) {
            function q() {
                t = h,
                v && v(),
                w && w.abort()
            }
            function r(b, d, e, f, g) {
                z && c.cancel(z),
                v = w = null,
                0 === d && (d = e ? 200 : "file" == yb(i).protocol ? 404 : 0),
                b(1223 === d ? 204 : d, e, f, g || ""),
                a.$$completeOutstandingRequest(o)
            }
            var t;
            if (a.$$incOutstandingRequestCount(), i = i || a.url(), "jsonp" == $b(e)) {
                var u = "_" + (d.counter++).toString(36);
                d[u] = function(a) {
                    d[u].data = a,
                    d[u].called = !0
                };
                var v = g(i.replace("JSON_CALLBACK", "angular.callbacks." + u), u,
                function(a, b) {
                    r(k, a, d[u].data, "", b),
                    d[u] = o
                })
            } else {
                var w = b(e);
                if (w.open(e, i, !0), f(l,
                function(a, b) {
                    s(a) && w.setRequestHeader(b, a)
                }), w.onreadystatechange = function() {
                    if (w && 4 == w.readyState) {
                        var a = null,
                        b = null,
                        c = "";
                        t !== h && (a = w.getAllResponseHeaders(), b = "response" in w ? w.response: w.responseText),
                        t === h && 10 > Ub || (c = w.statusText),
                        r(k, t || w.status, b, a, c)
                    }
                },
                n && (w.withCredentials = !0), p) try {
                    w.responseType = p
                } catch(y) {
                    if ("json" !== p) throw y
                }
                w.send(j || null)
            }
            if (m > 0) var z = c(q, m);
            else m && x(m.then) && m.then(q)
        }
    }
    function Pa() {
        var a = "{{",
        b = "}}";
        this.startSymbol = function(b) {
            return b ? (a = b, this) : a
        },
        this.endSymbol = function(a) {
            return a ? (b = a, this) : b
        },
        this.$get = ["$parse", "$exceptionHandler", "$sce",
        function(c, d, e) {
            function f(f, i, j) {
                for (var k, l, m = 0,
                n = [], o = f.length, p = !1, q = []; o > m;) - 1 != (k = f.indexOf(a, m)) && -1 != (l = f.indexOf(b, k + g)) ? (m != k && n.push(f.substring(m, k)), n.push(m = c(p = f.substring(k + g, l))), m.exp = p, m = l + h, p = !0) : (m != o && n.push(f.substring(m)), m = o);
                if ((o = n.length) || (n.push(""), o = 1), j && 1 < n.length) throw Kc("noconcat", f);
                return ! i || p ? (q.length = o, m = function(a) {
                    try {
                        for (var b, c = 0,
                        g = o; g > c; c++) {
                            if ("function" == typeof(b = n[c])) if (b = b(a), b = j ? e.getTrusted(j, b) : e.valueOf(b), null == b) b = "";
                            else switch (typeof b) {
                            case "string":
                                break;
                            case "number":
                                b = "" + b;
                                break;
                            default:
                                b = J(b)
                            }
                            q[c] = b
                        }
                        return q.join("")
                    } catch(h) {
                        a = Kc("interr", f, h.toString()),
                        d(a)
                    }
                },
                m.exp = f, m.parts = n, m) : void 0
            }
            var g = a.length,
            h = b.length;
            return f.startSymbol = function() {
                return a
            },
            f.endSymbol = function() {
                return b
            },
            f
        }]
    }
    function Qa() {
        this.$get = ["$rootScope", "$window", "$q",
        function(a, b, c) {
            function d(d, f, g, h) {
                var i = b.setInterval,
                j = b.clearInterval,
                k = c.defer(),
                l = k.promise,
                m = 0,
                n = s(h) && !h;
                return g = s(g) ? g: 0,
                l.then(null, null, d),
                l.$$intervalId = i(function() {
                    k.notify(m++),
                    g > 0 && m >= g && (k.resolve(m), j(l.$$intervalId), delete e[l.$$intervalId]),
                    n || a.$apply()
                },
                f),
                e[l.$$intervalId] = k,
                l
            }
            var e = {};
            return d.cancel = function(a) {
                return a && a.$$intervalId in e ? (e[a.$$intervalId].reject("canceled"), b.clearInterval(a.$$intervalId), delete e[a.$$intervalId], !0) : !1
            },
            d
        }]
    }
    function Ra() {
        this.$get = function() {
            return {
                id: "en-us",
                NUMBER_FORMATS: {
                    DECIMAL_SEP: ".",
                    GROUP_SEP: ",",
                    PATTERNS: [{
                        minInt: 1,
                        minFrac: 0,
                        maxFrac: 3,
                        posPre: "",
                        posSuf: "",
                        negPre: "-",
                        negSuf: "",
                        gSize: 3,
                        lgSize: 3
                    },
                    {
                        minInt: 1,
                        minFrac: 2,
                        maxFrac: 2,
                        posPre: "¤",
                        posSuf: "",
                        negPre: "(¤",
                        negSuf: ")",
                        gSize: 3,
                        lgSize: 3
                    }],
                    CURRENCY_SYM: "$"
                },
                DATETIME_FORMATS: {
                    MONTH: "January February March April May June July August September October November December".split(" "),
                    SHORTMONTH: "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),
                    DAY: "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),
                    SHORTDAY: "Sun Mon Tue Wed Thu Fri Sat".split(" "),
                    AMPMS: ["AM", "PM"],
                    medium: "MMM d, y h:mm:ss a",
                    "short": "M/d/yy h:mm a",
                    fullDate: "EEEE, MMMM d, y",
                    longDate: "MMMM d, y",
                    mediumDate: "MMM d, y",
                    shortDate: "M/d/yy",
                    mediumTime: "h:mm:ss a",
                    shortTime: "h:mm a"
                },
                pluralCat: function(a) {
                    return 1 === a ? "one": "other"
                }
            }
        }
    }
    function Sa(a) {
        a = a.split("/");
        for (var b = a.length; b--;) a[b] = Q(a[b]);
        return a.join("/")
    }
    function Ta(a, b, c) {
        a = yb(a, c),
        b.$$protocol = a.protocol,
        b.$$host = a.hostname,
        b.$$port = m(a.port) || Mc[a.protocol] || null
    }
    function Ua(a, b, c) {
        var d = "/" !== a.charAt(0);
        d && (a = "/" + a),
        a = yb(a, c),
        b.$$path = decodeURIComponent(d && "/" === a.pathname.charAt(0) ? a.pathname.substring(1) : a.pathname),
        b.$$search = O(a.search),
        b.$$hash = decodeURIComponent(a.hash),
        b.$$path && "/" != b.$$path.charAt(0) && (b.$$path = "/" + b.$$path)
    }
    function Va(a, b) {
        return 0 === b.indexOf(a) ? b.substr(a.length) : void 0
    }
    function Wa(a) {
        var b = a.indexOf("#");
        return - 1 == b ? a: a.substr(0, b)
    }
    function Xa(a) {
        return a.replace(/(#.+)|#$/, "$1")
    }
    function Ya(a) {
        return a.substr(0, Wa(a).lastIndexOf("/") + 1)
    }
    function Za(a, b) {
        this.$$html5 = !0,
        b = b || "";
        var d = Ya(a);
        Ta(a, this, a),
        this.$$parse = function(b) {
            var c = Va(d, b);
            if (!u(c)) throw Nc("ipthprfx", b, d);
            Ua(c, this, a),
            this.$$path || (this.$$path = "/"),
            this.$$compose()
        },
        this.$$compose = function() {
            var a = P(this.$$search),
            b = this.$$hash ? "#" + Q(this.$$hash) : "";
            this.$$url = Sa(this.$$path) + (a ? "?" + a: "") + b,
            this.$$absUrl = d + this.$$url.substr(1)
        },
        this.$$parseLinkUrl = function(e, f) {
            var g, h;
            return (g = Va(a, e)) !== c ? (h = g, h = (g = Va(b, g)) !== c ? d + (Va("/", g) || g) : a + h) : (g = Va(d, e)) !== c ? h = d + g: d == e + "/" && (h = d),
            h && this.$$parse(h),
            !!h
        }
    }
    function $a(a, b) {
        var c = Ya(a);
        Ta(a, this, a),
        this.$$parse = function(d) {
            var e = Va(a, d) || Va(c, d),
            e = "#" == e.charAt(0) ? Va(b, e) : this.$$html5 ? e: "";
            if (!u(e)) throw Nc("ihshprfx", d, b);
            Ua(e, this, a),
            d = this.$$path;
            var f = /^\/[A-Z]:(\/.*)/;
            0 === e.indexOf(a) && (e = e.replace(a, "")),
            f.exec(e) || (d = (e = f.exec(d)) ? e[1] : d),
            this.$$path = d,
            this.$$compose()
        },
        this.$$compose = function() {
            var c = P(this.$$search),
            d = this.$$hash ? "#" + Q(this.$$hash) : "";
            this.$$url = Sa(this.$$path) + (c ? "?" + c: "") + d,
            this.$$absUrl = a + (this.$$url ? b + this.$$url: "")
        },
        this.$$parseLinkUrl = function(b, c) {
            return Wa(a) == Wa(b) ? (this.$$parse(b), !0) : !1
        }
    }
    function _a(a, b) {
        this.$$html5 = !0,
        $a.apply(this, arguments);
        var c = Ya(a);
        this.$$parseLinkUrl = function(d, e) {
            var f, g;
            return a == Wa(d) ? f = d: (g = Va(c, d)) ? f = a + b + g: c === d + "/" && (f = c),
            f && this.$$parse(f),
            !!f
        },
        this.$$compose = function() {
            var c = P(this.$$search),
            d = this.$$hash ? "#" + Q(this.$$hash) : "";
            this.$$url = Sa(this.$$path) + (c ? "?" + c: "") + d,
            this.$$absUrl = a + b + this.$$url
        }
    }
    function ab(a) {
        return function() {
            return this[a]
        }
    }
    function bb(a, b) {
        return function(c) {
            return r(c) ? this[a] : (this[a] = b(c), this.$$compose(), this)
        }
    }
    function cb() {
        var b = "",
        c = !1;
        this.hashPrefix = function(a) {
            return s(a) ? (b = a, this) : b
        },
        this.html5Mode = function(a) {
            return s(a) ? (c = a, this) : c
        },
        this.$get = ["$rootScope", "$browser", "$sniffer", "$rootElement",
        function(d, e, f, g) {
            function h(a) {
                d.$broadcast("$locationChangeSuccess", i.absUrl(), a)
            }
            var i, j = e.baseHref(),
            k = e.url();
            c ? (j = k.substring(0, k.indexOf("/", k.indexOf("//") + 2)) + (j || "/"), f = f.history ? Za: _a) : (j = Wa(k), f = $a),
            i = new f(j, "#" + b),
            i.$$parseLinkUrl(k, k);
            var l = /^\s*(javascript|mailto):/i;
            g.on("click",
            function(b) {
                if (!b.ctrlKey && !b.metaKey && 2 != b.which) {
                    for (var c = Vb(b.target);
                    "a" !== $b(c[0].nodeName);) if (c[0] === g[0] || !(c = c.parent())[0]) return;
                    var f = c.prop("href"),
                    h = c.attr("href") || c.attr("xlink:href");
                    t(f) && "[object SVGAnimatedString]" === f.toString() && (f = yb(f.animVal).href),
                    l.test(f) || !f || c.attr("target") || b.isDefaultPrevented() || !i.$$parseLinkUrl(f, h) || (b.preventDefault(), i.absUrl() != e.url() && (d.$apply(), a.angular["ff-684208-preventDefault"] = !0))
                }
            }),
            i.absUrl() != k && e.url(i.absUrl(), !0),
            e.onUrlChange(function(a) {
                i.absUrl() != a && (d.$evalAsync(function() {
                    var b = i.absUrl();
                    i.$$parse(a),
                    d.$broadcast("$locationChangeStart", a, b).defaultPrevented ? (i.$$parse(b), e.url(b)) : h(b)
                }), d.$$phase || d.$digest())
            });
            var m = 0;
            return d.$watch(function() {
                var a = Xa(e.url()),
                b = Xa(i.absUrl()),
                c = i.$$replace;
                return m && a == b || (m++, d.$evalAsync(function() {
                    d.$broadcast("$locationChangeStart", i.absUrl(), a).defaultPrevented ? i.$$parse(a) : (e.url(i.absUrl(), c), h(a))
                })),
                i.$$replace = !1,
                m
            }),
            i
        }]
    }
    function db() {
        var a = !0,
        b = this;
        this.debugEnabled = function(b) {
            return s(b) ? (a = b, this) : a
        },
        this.$get = ["$window",
        function(c) {
            function d(a) {
                return a instanceof Error && (a.stack ? a = a.message && -1 === a.stack.indexOf(a.message) ? "Error: " + a.message + "\n" + a.stack: a.stack: a.sourceURL && (a = a.message + "\n" + a.sourceURL + ":" + a.line)),
                a
            }
            function e(a) {
                var b = c.console || {},
                e = b[a] || b.log || o;
                a = !1;
                try {
                    a = !!e.apply
                } catch(g) {}
                return a ?
                function() {
                    var a = [];
                    return f(arguments,
                    function(b) {
                        a.push(d(b))
                    }),
                    e.apply(b, a)
                }: function(a, b) {
                    e(a, null == b ? "": b)
                }
            }
            return {
                log: e("log"),
                info: e("info"),
                warn: e("warn"),
                error: e("error"),
                debug: function() {
                    var c = e("debug");
                    return function() {
                        a && c.apply(b, arguments)
                    }
                } ()
            }
        }]
    }
    function eb(a, b) {
        if ("__defineGetter__" === a || "__defineSetter__" === a || "__lookupGetter__" === a || "__lookupSetter__" === a || "__proto__" === a) throw Pc("isecfld", b);
        return a
    }
    function fb(a, b) {
        if (a += "", !u(a)) throw Pc("iseccst", b);
        return a
    }
    function gb(a, b) {
        if (a) {
            if (a.constructor === a) throw Pc("isecfn", b);
            if (a.document && a.location && a.alert && a.setInterval) throw Pc("isecwindow", b);
            if (a.children && (a.nodeName || a.prop && a.attr && a.find)) throw Pc("isecdom", b);
            if (a === Object) throw Pc("isecobj", b)
        }
        return a
    }
    function hb(a, b, d, e, f) {
        gb(a, e),
        f = f || {},
        b = b.split(".");
        for (var g, h = 0; 1 < b.length; h++) {
            g = eb(b.shift(), e);
            var i = gb(a[g], e);
            i || (i = {},
            a[g] = i),
            a = i,
            a.then && f.unwrapPromises && (Oc(e), "$$v" in a ||
            function(a) {
                a.then(function(b) {
                    a.$$v = b
                })
            } (a), a.$$v === c && (a.$$v = {}), a = a.$$v)
        }
        return g = eb(b.shift(), e),
        gb(a[g], e),
        a[g] = d
    }
    function ib(a) {
        return "constructor" == a
    }
    function jb(a, b, d, e, f, g, h) {
        eb(a, g),
        eb(b, g),
        eb(d, g),
        eb(e, g),
        eb(f, g);
        var i = function(a) {
            return gb(a, g)
        },
        j = h.expensiveChecks,
        k = j || ib(a) ? i: p,
        l = j || ib(b) ? i: p,
        m = j || ib(d) ? i: p,
        n = j || ib(e) ? i: p,
        o = j || ib(f) ? i: p;
        return h.unwrapPromises ?
        function(h, i) {
            var j, p = i && i.hasOwnProperty(a) ? i: h;
            return null == p ? p: ((p = k(p[a])) && p.then && (Oc(g), "$$v" in p || (j = p, j.$$v = c, j.then(function(a) {
                j.$$v = k(a)
            })), p = k(p.$$v)), b ? null == p ? c: ((p = l(p[b])) && p.then && (Oc(g), "$$v" in p || (j = p, j.$$v = c, j.then(function(a) {
                j.$$v = l(a)
            })), p = l(p.$$v)), d ? null == p ? c: ((p = m(p[d])) && p.then && (Oc(g), "$$v" in p || (j = p, j.$$v = c, j.then(function(a) {
                j.$$v = m(a)
            })), p = m(p.$$v)), e ? null == p ? c: ((p = n(p[e])) && p.then && (Oc(g), "$$v" in p || (j = p, j.$$v = c, j.then(function(a) {
                j.$$v = n(a)
            })), p = n(p.$$v)), f ? null == p ? c: ((p = o(p[f])) && p.then && (Oc(g), "$$v" in p || (j = p, j.$$v = c, j.then(function(a) {
                j.$$v = o(a)
            })), p = o(p.$$v)), p) : p) : p) : p) : p)
        }: function(g, h) {
            var i = h && h.hasOwnProperty(a) ? h: g;
            return null == i ? i: (i = k(i[a]), b ? null == i ? c: (i = l(i[b]), d ? null == i ? c: (i = m(i[d]), e ? null == i ? c: (i = n(i[e]), f ? null == i ? c: i = o(i[f]) : i) : i) : i) : i)
        }
    }
    function kb(a, b) {
        return function(c, d) {
            return a(c, d, Oc, gb, b)
        }
    }
    function lb(a, b, d) {
        var e = b.expensiveChecks,
        g = e ? Zc: Yc;
        if (g.hasOwnProperty(a)) return g[a];
        var h, i = a.split("."),
        j = i.length;
        if (b.csp) h = 6 > j ? jb(i[0], i[1], i[2], i[3], i[4], d, b) : function(a, e) {
            var f, g = 0;
            do f = jb(i[g++], i[g++], i[g++], i[g++], i[g++], d, b)(a, e),
            e = c,
            a = f;
            while (j > g);
            return f
        };
        else {
            var k = "var p;\n";
            e && (k += "s = eso(s, fe);\nl = eso(l, fe);\n");
            var l = e;
            f(i,
            function(a, c) {
                eb(a, d);
                var f = (c ? "s": '((l&&l.hasOwnProperty("' + a + '"))?l:s)') + '["' + a + '"]',
                g = e || ib(a);
                g && (f = "eso(" + f + ", fe)", l = !0),
                k += "if(s == null) return undefined;\ns=" + f + ";\n",
                b.unwrapPromises && (k += 'if (s && s.then) {\n pw("' + d.replace(/(["\r\n])/g, "\\$1") + '");\n if (!("$$v" in s)) {\n p=s;\n p.$$v = undefined;\n p.then(function(v) {p.$$v=' + (g ? "eso(v)": "v") + ";});\n}\n s=" + (g ? "eso(s.$$v)": "s.$$v") + "\n}\n")
            }),
            k += "return s;",
            h = new Function("s", "l", "pw", "eso", "fe", k),
            h.toString = q(k),
            (l || b.unwrapPromises) && (h = kb(h, d))
        }
        return "hasOwnProperty" !== a && (g[a] = h),
        h
    }
    function mb() {
        var a = {},
        b = {},
        c = {
            csp: !1,
            unwrapPromises: !1,
            logPromiseWarnings: !0,
            expensiveChecks: !1
        };
        this.unwrapPromises = function(a) {
            return s(a) ? (c.unwrapPromises = !!a, this) : c.unwrapPromises
        },
        this.logPromiseWarnings = function(a) {
            return s(a) ? (c.logPromiseWarnings = a, this) : c.logPromiseWarnings
        },
        this.$get = ["$filter", "$sniffer", "$log",
        function(d, e, f) {
            c.csp = e.csp;
            var g = {
                csp: c.csp,
                unwrapPromises: c.unwrapPromises,
                logPromiseWarnings: c.logPromiseWarnings,
                expensiveChecks: !0
            };
            return Oc = function(a) {
                c.logPromiseWarnings && !Qc.hasOwnProperty(a) && (Qc[a] = !0, f.warn("[$parse] Promise found in the expression `" + a + "`. Automatic unwrapping of promises in Angular expressions is deprecated."))
            },
            function(e, f) {
                var h;
                switch (typeof e) {
                case "string":
                    var i = f ? b: a;
                    if (i.hasOwnProperty(e)) return i[e];
                    h = f ? g: c;
                    var j = new Wc(h);
                    return h = new Xc(j, d, h).parse(e),
                    "hasOwnProperty" !== e && (i[e] = h),
                    h;
                case "function":
                    return e;
                default:
                    return o
                }
            }
        }]
    }
    function nb() {
        this.$get = ["$rootScope", "$exceptionHandler",
        function(a, b) {
            return ob(function(b) {
                a.$evalAsync(b)
            },
            b)
        }]
    }
    function ob(a, b) {
        function d(a) {
            return a
        }
        function e(a) {
            return i(a)
        }
        var g = function() {
            var f, i, k = [];
            return i = {
                resolve: function(b) {
                    if (k) {
                        var d = k;
                        k = c,
                        f = h(b),
                        d.length && a(function() {
                            for (var a, b = 0,
                            c = d.length; c > b; b++) a = d[b],
                            f.then(a[0], a[1], a[2])
                        })
                    }
                },
                reject: function(a) {
                    i.resolve(j(a))
                },
                notify: function(b) {
                    if (k) {
                        var c = k;
                        k.length && a(function() {
                            for (var a, d = 0,
                            e = c.length; e > d; d++) a = c[d],
                            a[2](b)
                        })
                    }
                },
                promise: {
                    then: function(a, c, h) {
                        var i = g(),
                        j = function(c) {
                            try {
                                i.resolve((x(a) ? a: d)(c))
                            } catch(e) {
                                i.reject(e),
                                b(e)
                            }
                        },
                        l = function(a) {
                            try {
                                i.resolve((x(c) ? c: e)(a))
                            } catch(d) {
                                i.reject(d),
                                b(d)
                            }
                        },
                        m = function(a) {
                            try {
                                i.notify((x(h) ? h: d)(a))
                            } catch(c) {
                                b(c)
                            }
                        };
                        return k ? k.push([j, l, m]) : f.then(j, l, m),
                        i.promise
                    },
                    "catch": function(a) {
                        return this.then(null, a)
                    },
                    "finally": function(a) {
                        function b(a, b) {
                            var c = g();
                            return b ? c.resolve(a) : c.reject(a),
                            c.promise
                        }
                        function c(c, e) {
                            var f = null;
                            try {
                                f = (a || d)()
                            } catch(g) {
                                return b(g, !1)
                            }
                            return f && x(f.then) ? f.then(function() {
                                return b(c, e)
                            },
                            function(a) {
                                return b(a, !1)
                            }) : b(c, e)
                        }
                        return this.then(function(a) {
                            return c(a, !0)
                        },
                        function(a) {
                            return c(a, !1)
                        })
                    }
                }
            }
        },
        h = function(b) {
            return b && x(b.then) ? b: {
                then: function(c) {
                    var d = g();
                    return a(function() {
                        d.resolve(c(b))
                    }),
                    d.promise
                }
            }
        },
        i = function(a) {
            var b = g();
            return b.reject(a),
            b.promise
        },
        j = function(c) {
            return {
                then: function(d, f) {
                    var h = g();
                    return a(function() {
                        try {
                            h.resolve((x(f) ? f: e)(c))
                        } catch(a) {
                            h.reject(a),
                            b(a)
                        }
                    }),
                    h.promise
                }
            }
        };
        return {
            defer: g,
            reject: i,
            when: function(c, f, j, k) {
                var l, m = g(),
                n = function(a) {
                    try {
                        return (x(f) ? f: d)(a)
                    } catch(c) {
                        return b(c),
                        i(c)
                    }
                },
                o = function(a) {
                    try {
                        return (x(j) ? j: e)(a)
                    } catch(c) {
                        return b(c),
                        i(c)
                    }
                },
                p = function(a) {
                    try {
                        return (x(k) ? k: d)(a)
                    } catch(c) {
                        b(c)
                    }
                };
                return a(function() {
                    h(c).then(function(a) {
                        l || (l = !0, m.resolve(h(a).then(n, o, p)))
                    },
                    function(a) {
                        l || (l = !0, m.resolve(o(a)))
                    },
                    function(a) {
                        l || m.notify(p(a))
                    })
                }),
                m.promise
            },
            all: function(a) {
                var b = g(),
                c = 0,
                d = hc(a) ? [] : {};
                return f(a,
                function(a, e) {
                    c++,
                    h(a).then(function(a) {
                        d.hasOwnProperty(e) || (d[e] = a, --c || b.resolve(d))
                    },
                    function(a) {
                        d.hasOwnProperty(e) || b.reject(a)
                    })
                }),
                0 === c && b.resolve(d),
                b.promise
            }
        }
    }
    function pb() {
        this.$get = ["$window", "$timeout",
        function(a, b) {
            var c = a.requestAnimationFrame || a.webkitRequestAnimationFrame || a.mozRequestAnimationFrame,
            d = a.cancelAnimationFrame || a.webkitCancelAnimationFrame || a.mozCancelAnimationFrame || a.webkitCancelRequestAnimationFrame,
            e = !!c,
            f = e ?
            function(a) {
                var b = c(a);
                return function() {
                    d(b)
                }
            }: function(a) {
                var c = b(a, 16.66, !1);
                return function() {
                    b.cancel(c)
                }
            };
            return f.supported = e,
            f
        }]
    }
    function qb() {
        var a = 10,
        b = d("$rootScope"),
        c = null;
        this.digestTtl = function(b) {
            return arguments.length && (a = b),
            a
        },
        this.$get = ["$injector", "$exceptionHandler", "$parse", "$browser",
        function(d, g, h, i) {
            function k() {
                this.$id = j(),
                this.$$phase = this.$parent = this.$$watchers = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = null,
                this["this"] = this.$root = this,
                this.$$destroyed = !1,
                this.$$asyncQueue = [],
                this.$$postDigestQueue = [],
                this.$$listeners = {},
                this.$$listenerCount = {},
                this.$$isolateBindings = {}
            }
            function l(a) {
                if (q.$$phase) throw b("inprog", q.$$phase);
                q.$$phase = a
            }
            function m(a, b) {
                var c = h(a);
                return W(c, b),
                c
            }
            function n(a, b, c) {
                do a.$$listenerCount[c] -= b,
                0 === a.$$listenerCount[c] && delete a.$$listenerCount[c];
                while (a = a.$parent)
            }
            function p() {}
            k.prototype = {
                constructor: k,
                $new: function(a) {
                    return a ? (a = new k, a.$root = this.$root, a.$$asyncQueue = this.$$asyncQueue, a.$$postDigestQueue = this.$$postDigestQueue) : (this.$$childScopeClass || (this.$$childScopeClass = function() {
                        this.$$watchers = this.$$nextSibling = this.$$childHead = this.$$childTail = null,
                        this.$$listeners = {},
                        this.$$listenerCount = {},
                        this.$id = j(),
                        this.$$childScopeClass = null
                    },
                    this.$$childScopeClass.prototype = this), a = new this.$$childScopeClass),
                    a["this"] = a,
                    a.$parent = this,
                    a.$$prevSibling = this.$$childTail,
                    this.$$childHead ? this.$$childTail = this.$$childTail.$$nextSibling = a: this.$$childHead = this.$$childTail = a,
                    a
                },
                $watch: function(a, b, d) {
                    var e = m(a, "watch"),
                    f = this.$$watchers,
                    g = {
                        fn: b,
                        last: p,
                        get: e,
                        exp: a,
                        eq: !!d
                    };
                    if (c = null, !x(b)) {
                        var h = m(b || o, "listener");
                        g.fn = function(a, b, c) {
                            h(c)
                        }
                    }
                    if ("string" == typeof a && e.constant) {
                        var i = g.fn;
                        g.fn = function(a, b, c) {
                            i.call(this, a, b, c),
                            D(f, g)
                        }
                    }
                    return f || (f = this.$$watchers = []),
                    f.unshift(g),
                    function() {
                        D(f, g),
                        c = null
                    }
                },
                $watchCollection: function(a, b) {
                    var c, d, f, g = this,
                    i = 1 < b.length,
                    j = 0,
                    k = h(a),
                    l = [],
                    m = {},
                    n = !0,
                    o = 0;
                    return this.$watch(function() {
                        c = k(g);
                        var a, b, f;
                        if (t(c)) if (e(c)) for (d !== l && (d = l, o = d.length = 0, j++), a = c.length, o !== a && (j++, d.length = o = a), b = 0; a > b; b++) f = d[b] !== d[b] && c[b] !== c[b],
                        f || d[b] === c[b] || (j++, d[b] = c[b]);
                        else {
                            d !== m && (d = m = {},
                            o = 0, j++),
                            a = 0;
                            for (b in c) c.hasOwnProperty(b) && (a++, d.hasOwnProperty(b) ? (f = d[b] !== d[b] && c[b] !== c[b], f || d[b] === c[b] || (j++, d[b] = c[b])) : (o++, d[b] = c[b], j++));
                            if (o > a) for (b in j++, d) d.hasOwnProperty(b) && !c.hasOwnProperty(b) && (o--, delete d[b])
                        } else d !== c && (d = c, j++);
                        return j
                    },
                    function() {
                        if (n ? (n = !1, b(c, c, g)) : b(c, f, g), i) if (t(c)) if (e(c)) {
                            f = Array(c.length);
                            for (var a = 0; a < c.length; a++) f[a] = c[a]
                        } else for (a in f = {},
                        c) _b.call(c, a) && (f[a] = c[a]);
                        else f = c
                    })
                },
                $digest: function() {
                    var d, e, f, h, j, k, m, n, o, r, s = this.$$asyncQueue,
                    t = this.$$postDigestQueue,
                    u = a,
                    v = [];
                    l("$digest"),
                    i.$$checkUrlChange(),
                    c = null;
                    do {
                        for (k = !1, m = this; s.length;) {
                            try {
                                r = s.shift(),
                                r.scope.$eval(r.expression)
                            } catch(w) {
                                q.$$phase = null,
                                g(w)
                            }
                            c = null
                        }
                        a: do {
                            if (h = m.$$watchers) for (j = h.length; j--;) try {
                                if (d = h[j]) if ((e = d.get(m)) === (f = d.last) || (d.eq ? G(e, f) : "number" == typeof e && "number" == typeof f && isNaN(e) && isNaN(f))) {
                                    if (d === c) {
                                        k = !1;
                                        break a
                                    }
                                } else k = !0,
                                c = d,
                                d.last = d.eq ? E(e, null) : e,
                                d.fn(e, f === p ? e: f, m),
                                5 > u && (n = 4 - u, v[n] || (v[n] = []), o = x(d.exp) ? "fn: " + (d.exp.name || d.exp.toString()) : d.exp, o += "; newVal: " + J(e) + "; oldVal: " + J(f), v[n].push(o))
                            } catch(y) {
                                q.$$phase = null,
                                g(y)
                            }
                            if (! (h = m.$$childHead || m !== this && m.$$nextSibling)) for (; m !== this && !(h = m.$$nextSibling);) m = m.$parent
                        } while ( m = h );
                        if ((k || s.length) && !u--) throw q.$$phase = null, b("infdig", a, J(v))
                    } while ( k || s . length );
                    for (q.$$phase = null; t.length;) try {
                        t.shift()()
                    } catch(z) {
                        g(z)
                    }
                },
                $destroy: function() {
                    if (!this.$$destroyed) {
                        var a = this.$parent;
                        this.$broadcast("$destroy"),
                        this.$$destroyed = !0,
                        this !== q && (f(this.$$listenerCount, H(null, n, this)), a.$$childHead == this && (a.$$childHead = this.$$nextSibling), a.$$childTail == this && (a.$$childTail = this.$$prevSibling), this.$$prevSibling && (this.$$prevSibling.$$nextSibling = this.$$nextSibling), this.$$nextSibling && (this.$$nextSibling.$$prevSibling = this.$$prevSibling), this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = this.$root = null, this.$$listeners = {},
                        this.$$watchers = this.$$asyncQueue = this.$$postDigestQueue = [], this.$destroy = this.$digest = this.$apply = o, this.$on = this.$watch = function() {
                            return o
                        })
                    }
                },
                $eval: function(a, b) {
                    return h(a)(this, b)
                },
                $evalAsync: function(a) {
                    q.$$phase || q.$$asyncQueue.length || i.defer(function() {
                        q.$$asyncQueue.length && q.$digest()
                    }),
                    this.$$asyncQueue.push({
                        scope: this,
                        expression: a
                    })
                },
                $$postDigest: function(a) {
                    this.$$postDigestQueue.push(a)
                },
                $apply: function(a) {
                    try {
                        return l("$apply"),
                        this.$eval(a)
                    } catch(b) {
                        g(b)
                    } finally {
                        q.$$phase = null;
                        try {
                            q.$digest()
                        } catch(c) {
                            throw g(c),
                            c
                        }
                    }
                },
                $on: function(a, b) {
                    var c = this.$$listeners[a];
                    c || (this.$$listeners[a] = c = []),
                    c.push(b);
                    var d = this;
                    do d.$$listenerCount[a] || (d.$$listenerCount[a] = 0),
                    d.$$listenerCount[a]++;
                    while (d = d.$parent);
                    var e = this;
                    return function() {
                        var d = C(c, b); - 1 !== d && (c[d] = null, n(e, 1, a))
                    }
                },
                $emit: function(a, b) {
                    var c, d, e, f = [],
                    h = this,
                    i = !1,
                    j = {
                        name: a,
                        targetScope: h,
                        stopPropagation: function() {
                            i = !0
                        },
                        preventDefault: function() {
                            j.defaultPrevented = !0
                        },
                        defaultPrevented: !1
                    },
                    k = [j].concat(bc.call(arguments, 1));
                    do {
                        for (c = h.$$listeners[a] || f, j.currentScope = h, d = 0, e = c.length; e > d; d++) if (c[d]) try {
                            c[d].apply(null, k)
                        } catch(l) {
                            g(l)
                        } else c.splice(d, 1), d--, e--;
                        if (i) break;
                        h = h.$parent
                    } while ( h );
                    return j
                },
                $broadcast: function(a, b) {
                    for (var c, d, e = this,
                    f = this,
                    h = {
                        name: a,
                        targetScope: this,
                        preventDefault: function() {
                            h.defaultPrevented = !0
                        },
                        defaultPrevented: !1
                    },
                    i = [h].concat(bc.call(arguments, 1)); e = f;) {
                        for (h.currentScope = e, f = e.$$listeners[a] || [], c = 0, d = f.length; d > c; c++) if (f[c]) try {
                            f[c].apply(null, i)
                        } catch(j) {
                            g(j)
                        } else f.splice(c, 1),
                        c--,
                        d--;
                        if (! (f = e.$$listenerCount[a] && e.$$childHead || e !== this && e.$$nextSibling)) for (; e !== this && !(f = e.$$nextSibling);) e = e.$parent
                    }
                    return h
                }
            };
            var q = new k;
            return q
        }]
    }
    function rb() {
        var a = /^\s*(https?|ftp|mailto|tel|file):/,
        b = /^\s*((https?|ftp|file):|data:image\/)/;
        this.aHrefSanitizationWhitelist = function(b) {
            return s(b) ? (a = b, this) : a
        },
        this.imgSrcSanitizationWhitelist = function(a) {
            return s(a) ? (b = a, this) : b
        },
        this.$get = function() {
            return function(c, d) {
                var e, f = d ? b: a;
                return Ub && !(Ub >= 8) || (e = yb(c).href, "" === e || e.match(f)) ? c: "unsafe:" + e
            }
        }
    }
    function sb(a) {
        if ("self" === a) return a;
        if (u(a)) {
            if ( - 1 < a.indexOf("***")) throw $c("iwcard", a);
            return a = a.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08").replace("\\*\\*", ".*").replace("\\*", "[^:/.?&;]*"),
            RegExp("^" + a + "$")
        }
        if (y(a)) return RegExp("^" + a.source + "$");
        throw $c("imatcher")
    }
    function tb(a) {
        var b = [];
        return s(a) && f(a,
        function(a) {
            b.push(sb(a))
        }),
        b
    }
    function ub() {
        this.SCE_CONTEXTS = _c;
        var a = ["self"],
        b = [];
        this.resourceUrlWhitelist = function(b) {
            return arguments.length && (a = tb(b)),
            a
        },
        this.resourceUrlBlacklist = function(a) {
            return arguments.length && (b = tb(a)),
            b
        },
        this.$get = ["$injector",
        function(d) {
            function e(a) {
                var b = function(a) {
                    this.$$unwrapTrustedValue = function() {
                        return a
                    }
                };
                return a && (b.prototype = new a),
                b.prototype.valueOf = function() {
                    return this.$$unwrapTrustedValue()
                },
                b.prototype.toString = function() {
                    return this.$$unwrapTrustedValue().toString()
                },
                b
            }
            var f = function(a) {
                throw $c("unsafe")
            };
            d.has("$sanitize") && (f = d.get("$sanitize"));
            var g = e(),
            h = {};
            return h[_c.HTML] = e(g),
            h[_c.CSS] = e(g),
            h[_c.URL] = e(g),
            h[_c.JS] = e(g),
            h[_c.RESOURCE_URL] = e(h[_c.URL]),
            {
                trustAs: function(a, b) {
                    var d = h.hasOwnProperty(a) ? h[a] : null;
                    if (!d) throw $c("icontext", a, b);
                    if (null === b || b === c || "" === b) return b;
                    if ("string" != typeof b) throw $c("itype", a);
                    return new d(b)
                },
                getTrusted: function(d, e) {
                    if (null === e || e === c || "" === e) return e;
                    var g = h.hasOwnProperty(d) ? h[d] : null;
                    if (g && e instanceof g) return e.$$unwrapTrustedValue();
                    if (d === _c.RESOURCE_URL) {
                        var i, j, g = yb(e.toString()),
                        k = !1;
                        for (i = 0, j = a.length; j > i; i++) if ("self" === a[i] ? zb(g) : a[i].exec(g.href)) {
                            k = !0;
                            break
                        }
                        if (k) for (i = 0, j = b.length; j > i; i++) if ("self" === b[i] ? zb(g) : b[i].exec(g.href)) {
                            k = !1;
                            break
                        }
                        if (k) return e;
                        throw $c("insecurl", e.toString())
                    }
                    if (d === _c.HTML) return f(e);
                    throw $c("unsafe")
                },
                valueOf: function(a) {
                    return a instanceof g ? a.$$unwrapTrustedValue() : a
                }
            }
        }]
    }
    function vb() {
        var a = !0;
        this.enabled = function(b) {
            return arguments.length && (a = !!b),
            a
        },
        this.$get = ["$parse", "$sniffer", "$sceDelegate",
        function(b, c, d) {
            if (a && c.msie && 8 > c.msieDocumentMode) throw $c("iequirks");
            var e = F(_c);
            e.isEnabled = function() {
                return a
            },
            e.trustAs = d.trustAs,
            e.getTrusted = d.getTrusted,
            e.valueOf = d.valueOf,
            a || (e.trustAs = e.getTrusted = function(a, b) {
                return b
            },
            e.valueOf = p),
            e.parseAs = function(a, c) {
                var d = b(c);
                return d.literal && d.constant ? d: function(b, c) {
                    return e.getTrusted(a, d(b, c))
                }
            };
            var g = e.parseAs,
            h = e.getTrusted,
            i = e.trustAs;
            return f(_c,
            function(a, b) {
                var c = $b(b);
                e[aa("parse_as_" + c)] = function(b) {
                    return g(a, b)
                },
                e[aa("get_trusted_" + c)] = function(b) {
                    return h(a, b)
                },
                e[aa("trust_as_" + c)] = function(b) {
                    return i(a, b)
                }
            }),
            e
        }]
    }
    function wb() {
        this.$get = ["$window", "$document",
        function(a, b) {
            var c, d = {},
            e = m((/android (\d+)/.exec($b((a.navigator || {}).userAgent)) || [])[1]),
            f = /Boxee/i.test((a.navigator || {}).userAgent),
            g = b[0] || {},
            h = g.documentMode,
            i = /^(Moz|webkit|O|ms)(?=[A-Z])/,
            j = g.body && g.body.style,
            k = !1,
            l = !1;
            if (j) {
                for (var n in j) if (k = i.exec(n)) {
                    c = k[0],
                    c = c.substr(0, 1).toUpperCase() + c.substr(1);
                    break
                }
                c || (c = "WebkitOpacity" in j && "webkit"),
                k = !!("transition" in j || c + "Transition" in j),
                l = !!("animation" in j || c + "Animation" in j),
                !e || k && l || (k = u(g.body.style.webkitTransition), l = u(g.body.style.webkitAnimation))
            }
            return {
                history: !(!a.history || !a.history.pushState || 4 > e || f),
                hashchange: "onhashchange" in a && (!h || h > 7),
                hasEvent: function(a) {
                    if ("input" == a && 9 == Ub) return ! 1;
                    if (r(d[a])) {
                        var b = g.createElement("div");
                        d[a] = "on" + a in b
                    }
                    return d[a]
                },
                csp: jc(),
                vendorPrefix: c,
                transitions: k,
                animations: l,
                android: e,
                msie: Ub,
                msieDocumentMode: h
            }
        }]
    }
    function xb() {
        this.$get = ["$rootScope", "$browser", "$q", "$exceptionHandler",
        function(a, b, c, d) {
            function e(e, g, h) {
                var i = c.defer(),
                j = i.promise,
                k = s(h) && !h;
                return g = b.defer(function() {
                    try {
                        i.resolve(e())
                    } catch(b) {
                        i.reject(b),
                        d(b)
                    } finally {
                        delete f[j.$$timeoutId]
                    }
                    k || a.$apply()
                },
                g),
                j.$$timeoutId = g,
                f[g] = i,
                j
            }
            var f = {};
            return e.cancel = function(a) {
                return a && a.$$timeoutId in f ? (f[a.$$timeoutId].reject("canceled"), delete f[a.$$timeoutId], b.defer.cancel(a.$$timeoutId)) : !1
            },
            e
        }]
    }
    function yb(a, b) {
        var c = a;
        return Ub && (ad.setAttribute("href", c), c = ad.href),
        ad.setAttribute("href", c),
        {
            href: ad.href,
            protocol: ad.protocol ? ad.protocol.replace(/:$/, "") : "",
            host: ad.host,
            search: ad.search ? ad.search.replace(/^\?/, "") : "",
            hash: ad.hash ? ad.hash.replace(/^#/, "") : "",
            hostname: ad.hostname,
            port: ad.port,
            pathname: "/" === ad.pathname.charAt(0) ? ad.pathname: "/" + ad.pathname
        }
    }
    function zb(a) {
        return a = u(a) ? yb(a) : a,
        a.protocol === bd.protocol && a.host === bd.host
    }
    function Ab() {
        this.$get = q(a)
    }
    function Bb(a) {
        function b(d, e) {
            if (t(d)) {
                var g = {};
                return f(d,
                function(a, c) {
                    g[c] = b(c, a)
                }),
                g
            }
            return a.factory(d + c, e)
        }
        var c = "Filter";
        this.register = b,
        this.$get = ["$injector",
        function(a) {
            return function(b) {
                return a.get(b + c)
            }
        }],
        b("currency", Db),
        b("date", Jb),
        b("filter", Cb),
        b("json", Kb),
        b("limitTo", Lb),
        b("lowercase", gd),
        b("number", Eb),
        b("orderBy", Mb),
        b("uppercase", hd)
    }
    function Cb() {
        return function(a, b, c) {
            if (!hc(a)) return a;
            var d = typeof c,
            e = [];
            e.check = function(a) {
                for (var b = 0; b < e.length; b++) if (!e[b](a)) return ! 1;
                return ! 0
            },
            "function" !== d && (c = "boolean" === d && c ?
            function(a, b) {
                return fc.equals(a, b)
            }: function(a, b) {
                if (a && b && "object" == typeof a && "object" == typeof b) {
                    for (var d in a) if ("$" !== d.charAt(0) && _b.call(a, d) && c(a[d], b[d])) return ! 0;
                    return ! 1
                }
                return b = ("" + b).toLowerCase(),
                -1 < ("" + a).toLowerCase().indexOf(b)
            });
            var f = function(a, b) {
                if ("string" == typeof b && "!" === b.charAt(0)) return ! f(a, b.substr(1));
                switch (typeof a) {
                case "boolean":
                case "number":
                case "string":
                    return c(a, b);
                case "object":
                    switch (typeof b) {
                    case "object":
                        return c(a, b);
                    default:
                        for (var d in a) if ("$" !== d.charAt(0) && f(a[d], b)) return ! 0
                    }
                    return ! 1;
                case "array":
                    for (d = 0; d < a.length; d++) if (f(a[d], b)) return ! 0;
                    return ! 1;
                default:
                    return ! 1
                }
            };
            switch (typeof b) {
            case "boolean":
            case "number":
            case "string":
                b = {
                    $: b
                };
            case "object":
                for (var g in b)(function(a) {
                    "undefined" != typeof b[a] && e.push(function(c) {
                        return f("$" == a ? c: c && c[a], b[a])
                    })
                })(g);
                break;
            case "function":
                e.push(b);
                break;
            default:
                return a
            }
            for (d = [], g = 0; g < a.length; g++) {
                var h = a[g];
                e.check(h) && d.push(h)
            }
            return d
        }
    }
    function Db(a) {
        var b = a.NUMBER_FORMATS;
        return function(a, c) {
            return r(c) && (c = b.CURRENCY_SYM),
            Fb(a, b.PATTERNS[1], b.GROUP_SEP, b.DECIMAL_SEP, 2).replace(/\u00A4/g, c)
        }
    }
    function Eb(a) {
        var b = a.NUMBER_FORMATS;
        return function(a, c) {
            return Fb(a, b.PATTERNS[0], b.GROUP_SEP, b.DECIMAL_SEP, c)
        }
    }
    function Fb(a, b, c, d, e) {
        if (null == a || !isFinite(a) || t(a)) return "";
        var f = 0 > a;
        a = Math.abs(a);
        var g = a + "",
        h = "",
        i = [],
        j = !1;
        if ( - 1 !== g.indexOf("e")) {
            var k = g.match(/([\d\.]+)e(-?)(\d+)/);
            k && "-" == k[2] && k[3] > e + 1 ? (g = "0", a = 0) : (h = g, j = !0)
        }
        if (j) e > 0 && a > -1 && 1 > a && (h = a.toFixed(e));
        else {
            g = (g.split(cd)[1] || "").length,
            r(e) && (e = Math.min(Math.max(b.minFrac, g), b.maxFrac)),
            a = +(Math.round( + (a.toString() + "e" + e)).toString() + "e" + -e),
            0 === a && (f = !1),
            a = ("" + a).split(cd),
            g = a[0],
            a = a[1] || "";
            var k = 0,
            l = b.lgSize,
            m = b.gSize;
            if (g.length >= l + m) for (k = g.length - l, j = 0; k > j; j++) 0 === (k - j) % m && 0 !== j && (h += c),
            h += g.charAt(j);
            for (j = k; j < g.length; j++) 0 === (g.length - j) % l && 0 !== j && (h += c),
            h += g.charAt(j);
            for (; a.length < e;) a += "0";
            e && "0" !== e && (h += d + a.substr(0, e))
        }
        return i.push(f ? b.negPre: b.posPre),
        i.push(h),
        i.push(f ? b.negSuf: b.posSuf),
        i.join("")
    }
    function Gb(a, b, c) {
        var d = "";
        for (0 > a && (d = "-", a = -a), a = "" + a; a.length < b;) a = "0" + a;
        return c && (a = a.substr(a.length - b)),
        d + a
    }
    function Hb(a, b, c, d) {
        return c = c || 0,
        function(e) {
            return e = e["get" + a](),
            (c > 0 || e > -c) && (e += c),
            0 === e && -12 == c && (e = 12),
            Gb(e, b, d)
        }
    }
    function Ib(a, b) {
        return function(c, d) {
            var e = c["get" + a](),
            f = ac(b ? "SHORT" + a: a);
            return d[f][e]
        }
    }
    function Jb(a) {
        function b(a) {
            var b;
            if (b = a.match(c)) {
                a = new Date(0);
                var d = 0,
                e = 0,
                f = b[8] ? a.setUTCFullYear: a.setFullYear,
                g = b[8] ? a.setUTCHours: a.setHours;
                b[9] && (d = m(b[9] + b[10]), e = m(b[9] + b[11])),
                f.call(a, m(b[1]), m(b[2]) - 1, m(b[3])),
                d = m(b[4] || 0) - d,
                e = m(b[5] || 0) - e,
                f = m(b[6] || 0),
                b = Math.round(1e3 * parseFloat("0." + (b[7] || 0))),
                g.call(a, d, e, f, b)
            }
            return a
        }
        var c = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
        return function(c, d) {
            var e, g, h = "",
            i = [];
            if (d = d || "mediumDate", d = a.DATETIME_FORMATS[d] || d, u(c) && (c = fd.test(c) ? m(c) : b(c)), v(c) && (c = new Date(c)), !w(c)) return c;
            for (; d;)(g = ed.exec(d)) ? (i = i.concat(bc.call(g, 1)), d = i.pop()) : (i.push(d), d = null);
            return f(i,
            function(b) {
                e = dd[b],
                h += e ? e(c, a.DATETIME_FORMATS) : b.replace(/(^'|'$)/g, "").replace(/''/g, "'")
            }),
            h
        }
    }
    function Kb() {
        return function(a) {
            return J(a, !0)
        }
    }
    function Lb() {
        return function(a, b) {
            return hc(a) || u(a) ? (b = 1 / 0 === Math.abs(Number(b)) ? Number(b) : m(b)) ? b > 0 ? a.slice(0, b) : a.slice(b) : u(a) ? "": [] : a
        }
    }
    function Mb(a) {
        return function(b, c, d) {
            function f(a, b) {
                return L(b) ?
                function(b, c) {
                    return a(c, b)
                }: a
            }
            function g(a, b) {
                var c = typeof a,
                d = typeof b;
                return c == d ? (w(a) && w(b) && (a = a.valueOf(), b = b.valueOf()), "string" == c && (a = a.toLowerCase(), b = b.toLowerCase()), a === b ? 0 : b > a ? -1 : 1) : d > c ? -1 : 1
            }
            return e(b) ? (c = hc(c) ? c: [c], 0 === c.length && (c = ["+"]), c = B(c,
            function(b) {
                var c = !1,
                d = b || p;
                if (u(b)) {
                    if (("+" == b.charAt(0) || "-" == b.charAt(0)) && (c = "-" == b.charAt(0), b = b.substring(1)), "" === b) return f(function(a, b) {
                        return g(a, b)
                    },
                    c);
                    if (d = a(b), d.constant) {
                        var e = d();
                        return f(function(a, b) {
                            return g(a[e], b[e])
                        },
                        c)
                    }
                }
                return f(function(a, b) {
                    return g(d(a), d(b))
                },
                c)
            }), bc.call(b).sort(f(function(a, b) {
                for (var d = 0; d < c.length; d++) {
                    var e = c[d](a, b);
                    if (0 !== e) return e
                }
                return 0
            },
            d))) : b
        }
    }
    function Nb(a) {
        return x(a) && (a = {
            link: a
        }),
        a.restrict = a.restrict || "AC",
        q(a)
    }
    function Ob(a, b, c, d) {
        function e(b, c) {
            c = c ? "-" + U(c, "-") : "",
            d.setClass(a, (b ? ud: vd) + c, (b ? vd: ud) + c)
        }
        var g = this,
        h = a.parent().controller("form") || kd,
        i = 0,
        j = g.$error = {},
        k = [];
        g.$name = b.name || b.ngForm,
        g.$dirty = !1,
        g.$pristine = !0,
        g.$valid = !0,
        g.$invalid = !1,
        h.$addControl(g),
        a.addClass(wd),
        e(!0),
        g.$addControl = function(a) {
            X(a.$name, "input"),
            k.push(a),
            a.$name && (g[a.$name] = a)
        },
        g.$removeControl = function(a) {
            a.$name && g[a.$name] === a && delete g[a.$name],
            f(j,
            function(b, c) {
                g.$setValidity(c, !0, a)
            }),
            D(k, a)
        },
        g.$setValidity = function(a, b, c) {
            var d = j[a];
            if (b) d && (D(d, c), d.length || (i--, i || (e(b), g.$valid = !0, g.$invalid = !1), j[a] = !1, e(!0, a), h.$setValidity(a, !0, g)));
            else {
                if (i || e(b), d) {
                    if ( - 1 != C(d, c)) return
                } else j[a] = d = [],
                i++,
                e(!1, a),
                h.$setValidity(a, !1, g);
                d.push(c),
                g.$valid = !1,
                g.$invalid = !0
            }
        },
        g.$setDirty = function() {
            d.removeClass(a, wd),
            d.addClass(a, xd),
            g.$dirty = !0,
            g.$pristine = !1,
            h.$setDirty()
        },
        g.$setPristine = function() {
            d.removeClass(a, xd),
            d.addClass(a, wd),
            g.$dirty = !1,
            g.$pristine = !0,
            f(k,
            function(a) {
                a.$setPristine()
            })
        }
    }
    function Pb(a, b, d, e) {
        return a.$setValidity(b, d),
        d ? e: c
    }
    function Qb(a, b) {
        var c, d;
        if (b) for (c = 0; c < b.length; ++c) if (d = b[c], a[d]) return ! 0;
        return ! 1
    }
    function Rb(a, b, c, d, e) {
        t(e) && (a.$$hasNativeValidators = !0, a.$parsers.push(function(f) {
            return a.$error[b] || Qb(e, d) || !Qb(e, c) ? f: void a.$setValidity(b, !1)
        }))
    }
    function Sb(a, b, c, e, f, g) {
        var h = b.prop(Zb),
        i = b[0].placeholder,
        j = {},
        k = $b(b[0].type);
        if (e.$$validityState = h, !f.android) {
            var l = !1;
            b.on("compositionstart",
            function(a) {
                l = !0
            }),
            b.on("compositionend",
            function() {
                l = !1,
                n()
            })
        }
        var n = function(d) {
            if (!l) {
                var f = b.val();
                Ub && "input" === (d || j).type && b[0].placeholder !== i ? i = b[0].placeholder: ("password" !== k && L(c.ngTrim || "T") && (f = ic(f)), d = h && e.$$hasNativeValidators, (e.$viewValue !== f || "" === f && d) && (a.$root.$$phase ? e.$setViewValue(f) : a.$apply(function() {
                    e.$setViewValue(f)
                })))
            }
        };
        if (f.hasEvent("input")) b.on("input", n);
        else {
            var o, p = function() {
                o || (o = g.defer(function() {
                    n(),
                    o = null
                }))
            };
            b.on("keydown",
            function(a) {
                a = a.keyCode,
                91 === a || a > 15 && 19 > a || a >= 37 && 40 >= a || p()
            }),
            f.hasEvent("paste") && b.on("paste cut", p)
        }
        b.on("change", n),
        e.$render = function() {
            b.val(e.$isEmpty(e.$viewValue) ? "": e.$viewValue)
        };
        var q = c.ngPattern;
        if (q && ((f = q.match(/^\/(.*)\/([gim]*)$/)) ? (q = RegExp(f[1], f[2]), f = function(a) {
            return Pb(e, "pattern", e.$isEmpty(a) || q.test(a), a)
        }) : f = function(c) {
            var f = a.$eval(q);
            if (!f || !f.test) throw d("ngPattern")("noregexp", q, f, M(b));
            return Pb(e, "pattern", e.$isEmpty(c) || f.test(c), c)
        },
        e.$formatters.push(f), e.$parsers.push(f)), c.ngMinlength) {
            var r = m(c.ngMinlength);
            f = function(a) {
                return Pb(e, "minlength", e.$isEmpty(a) || a.length >= r, a)
            },
            e.$parsers.push(f),
            e.$formatters.push(f)
        }
        if (c.ngMaxlength) {
            var s = m(c.ngMaxlength);
            f = function(a) {
                return Pb(e, "maxlength", e.$isEmpty(a) || a.length <= s, a)
            },
            e.$parsers.push(f),
            e.$formatters.push(f)
        }
    }
    function Tb(a, b) {
        return a = "ngClass" + a,
        ["$animate",
        function(c) {
            function d(a, b) {
                var c = [],
                d = 0;
                a: for (; d < a.length; d++) {
                    for (var e = a[d], f = 0; f < b.length; f++) if (e == b[f]) continue a;
                    c.push(e)
                }
                return c
            }
            function e(a) {
                if (!hc(a)) {
                    if (u(a)) return a.split(" ");
                    if (t(a)) {
                        var b = [];
                        return f(a,
                        function(a, c) {
                            a && (b = b.concat(c.split(" ")))
                        }),
                        b
                    }
                }
                return a
            }
            return {
                restrict: "AC",
                link: function(g, h, i) {
                    function j(a, b) {
                        var c = h.data("$classCounts") || {},
                        d = [];
                        return f(a,
                        function(a) { (b > 0 || c[a]) && (c[a] = (c[a] || 0) + b, c[a] === +(b > 0) && d.push(a))
                        }),
                        h.data("$classCounts", c),
                        d.join(" ")
                    }
                    function k(a) {
                        if (!0 === b || g.$index % 2 === b) {
                            var f = e(a || []);
                            if (l) {
                                if (!G(a, l)) {
                                    var k = e(l),
                                    m = d(f, k),
                                    f = d(k, f),
                                    f = j(f, -1),
                                    m = j(m, 1);
                                    0 === m.length ? c.removeClass(h, f) : 0 === f.length ? c.addClass(h, m) : c.setClass(h, m, f)
                                }
                            } else {
                                var m = j(f, 1);
                                i.$addClass(m)
                            }
                        }
                        l = F(a)
                    }
                    var l;
                    g.$watch(i[a], k, !0),
                    i.$observe("class",
                    function(b) {
                        k(g.$eval(i[a]))
                    }),
                    "ngClass" !== a && g.$watch("$index",
                    function(c, d) {
                        var f = 1 & c;
                        if (f !== (1 & d)) {
                            var h = e(g.$eval(i[a]));
                            f === b ? (f = j(h, 1), i.$addClass(f)) : (f = j(h, -1), i.$removeClass(f))
                        }
                    })
                }
            }
        }]
    }
    var Ub, Vb, Wb, Xb, Yb, Zb = "validity",
    $b = function(a) {
        return u(a) ? a.toLowerCase() : a
    },
    _b = Object.prototype.hasOwnProperty,
    ac = function(a) {
        return u(a) ? a.toUpperCase() : a
    },
    bc = [].slice,
    cc = [].push,
    dc = Object.prototype.toString,
    ec = d("ng"),
    fc = a.angular || (a.angular = {}),
    gc = ["0", "0", "0"];
    Ub = m((/msie (\d+)/.exec($b(navigator.userAgent)) || [])[1]),
    isNaN(Ub) && (Ub = m((/trident\/.*; rv:(\d+)/.exec($b(navigator.userAgent)) || [])[1])),
    o.$inject = [],
    p.$inject = [];
    var hc = function() {
        return x(Array.isArray) ? Array.isArray: function(a) {
            return "[object Array]" === dc.call(a)
        }
    } (),
    ic = function() {
        return String.prototype.trim ?
        function(a) {
            return u(a) ? a.trim() : a
        }: function(a) {
            return u(a) ? a.replace(/^\s\s*/, "").replace(/\s\s*$/, "") : a
        }
    } ();
    Yb = 9 > Ub ?
    function(a) {
        return a = a.nodeName ? a: a[0],
        a.scopeName && "HTML" != a.scopeName ? ac(a.scopeName + ":" + a.nodeName) : a.nodeName
    }: function(a) {
        return a.nodeName ? a.nodeName: a[0].nodeName
    };
    var jc = function() {
        if (s(jc.isActive_)) return jc.isActive_;
        var a = !(!b.querySelector("[ng-csp]") && !b.querySelector("[data-ng-csp]"));
        if (!a) try {
            new Function("")
        } catch(c) {
            a = !0
        }
        return jc.isActive_ = a
    },
    kc = /[A-Z]/g,
    lc = {
        full: "1.2.32",
        major: 1,
        minor: 2,
        dot: 32,
        codeName: "alternation-intention"
    };
    ca.expando = "ng339";
    var mc = ca.cache = {},
    nc = 1,
    oc = a.document.addEventListener ?
    function(a, b, c) {
        a.addEventListener(b, c, !1)
    }: function(a, b, c) {
        a.attachEvent("on" + b, c)
    },
    pc = a.document.removeEventListener ?
    function(a, b, c) {
        a.removeEventListener(b, c, !1)
    }: function(a, b, c) {
        a.detachEvent("on" + b, c)
    };
    ca._data = function(a) {
        return this.cache[a[this.expando]] || {}
    };
    var qc = /([\:\-\_]+(.))/g,
    rc = /^moz([A-Z])/,
    sc = d("jqLite"),
    tc = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
    uc = /<|&#?\w+;/,
    vc = /<([\w:]+)/,
    wc = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
    xc = {
        option: [1, '<select multiple="multiple">', "</select>"],
        thead: [1, "<table>", "</table>"],
        col: [2, "<table><colgroup>", "</colgroup></table>"],
        tr: [2, "<table><tbody>", "</tbody></table>"],
        td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
        _default: [0, "", ""]
    };
    xc.optgroup = xc.option,
    xc.tbody = xc.tfoot = xc.colgroup = xc.caption = xc.thead,
    xc.th = xc.td;
    var yc = ca.prototype = {
        ready: function(c) {
            function d() {
                e || (e = !0, c())
            }
            var e = !1;
            "complete" === b.readyState ? setTimeout(d) : (this.on("DOMContentLoaded", d), ca(a).on("load", d))
        },
        toString: function() {
            var a = [];
            return f(this,
            function(b) {
                a.push("" + b)
            }),
            "[" + a.join(", ") + "]"
        },
        eq: function(a) {
            return Vb(a >= 0 ? this[a] : this[this.length + a])
        },
        length: 0,
        push: cc,
        sort: [].sort,
        splice: [].splice
    },
    zc = {};
    f("multiple selected checked disabled readOnly required open".split(" "),
    function(a) {
        zc[$b(a)] = a
    });
    var Ac = {};
    f("input select option textarea button form details".split(" "),
    function(a) {
        Ac[ac(a)] = !0
    }),
    f({
        data: ia,
        removeData: ga
    },
    function(a, b) {
        ca[b] = a
    }),
    f({
        data: ia,
        inheritedData: oa,
        scope: function(a) {
            return Vb.data(a, "$scope") || oa(a.parentNode || a, ["$isolateScope", "$scope"])
        },
        isolateScope: function(a) {
            return Vb.data(a, "$isolateScope") || Vb.data(a, "$isolateScopeNoTemplate")
        },
        controller: na,
        injector: function(a) {
            return oa(a, "$injector")
        },
        removeAttr: function(a, b) {
            a.removeAttribute(b)
        },
        hasClass: ja,
        css: function(a, b, d) {
            if (b = aa(b), !s(d)) {
                var e;
                return 8 >= Ub && (e = a.currentStyle && a.currentStyle[b], "" === e && (e = "auto")),
                e = e || a.style[b],
                8 >= Ub && (e = "" === e ? c: e),
                e
            }
            a.style[b] = d
        },
        attr: function(a, b, d) {
            var e = $b(b);
            if (zc[e]) {
                if (!s(d)) return a[b] || (a.attributes.getNamedItem(b) || o).specified ? e: c;
                d ? (a[b] = !0, a.setAttribute(b, e)) : (a[b] = !1, a.removeAttribute(e))
            } else if (s(d)) a.setAttribute(b, d);
            else if (a.getAttribute) return a = a.getAttribute(b, 2),
            null === a ? c: a
        },
        prop: function(a, b, c) {
            return s(c) ? void(a[b] = c) : a[b]
        },
        text: function() {
            function a(a, c) {
                var d = b[a.nodeType];
                return r(c) ? d ? a[d] : "": void(a[d] = c)
            }
            var b = [];
            return 9 > Ub ? (b[1] = "innerText", b[3] = "nodeValue") : b[1] = b[3] = "textContent",
            a.$dv = "",
            a
        } (),
        val: function(a, b) {
            if (r(b)) {
                if ("SELECT" === Yb(a) && a.multiple) {
                    var c = [];
                    return f(a.options,
                    function(a) {
                        a.selected && c.push(a.value || a.text)
                    }),
                    0 === c.length ? null: c
                }
                return a.value
            }
            a.value = b
        },
        html: function(a, b) {
            if (r(b)) return a.innerHTML;
            for (var c = 0,
            d = a.childNodes; c < d.length; c++) ea(d[c]);
            a.innerHTML = b
        },
        empty: pa
    },
    function(a, b) {
        ca.prototype[b] = function(b, d) {
            var e, f, g = this.length;
            if (a !== pa && (2 == a.length && a !== ja && a !== na ? b: d) === c) {
                if (t(b)) {
                    for (e = 0; g > e; e++) if (a === ia) a(this[e], b);
                    else for (f in b) a(this[e], f, b[f]);
                    return this
                }
                for (e = a.$dv, g = e === c ? Math.min(g, 1) : g, f = 0; g > f; f++) {
                    var h = a(this[f], b, d);
                    e = e ? e + h: h
                }
                return e
            }
            for (e = 0; g > e; e++) a(this[e], b, d);
            return this
        }
    }),
    f({
        removeData: ga,
        dealoc: ea,
        on: function he(a, c, d, e) {
            if (s(e)) throw sc("onargs");
            var g = ha(a, "events"),
            h = ha(a, "handle");
            g || ha(a, "events", g = {}),
            h || ha(a, "handle", h = ra(a, g)),
            f(c.split(" "),
            function(c) {
                var e = g[c];
                if (!e) {
                    if ("mouseenter" == c || "mouseleave" == c) {
                        var f = b.body.contains || b.body.compareDocumentPosition ?
                        function(a, b) {
                            var c = 9 === a.nodeType ? a.documentElement: a,
                            d = b && b.parentNode;
                            return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d)))
                        }: function(a, b) {
                            if (b) for (; b = b.parentNode;) if (b === a) return ! 0;
                            return ! 1
                        };
                        g[c] = [],
                        he(a, {
                            mouseleave: "mouseout",
                            mouseenter: "mouseover"
                        } [c],
                        function(a) {
                            var b = a.relatedTarget;
                            b && (b === this || f(this, b)) || h(a, c)
                        })
                    } else oc(a, c, h),
                    g[c] = [];
                    e = g[c]
                }
                e.push(d)
            })
        },
        off: fa,
        one: function(a, b, c) {
            a = Vb(a),
            a.on(b,
            function d() {
                a.off(b, c),
                a.off(b, d)
            }),
            a.on(b, c)
        },
        replaceWith: function(a, b) {
            var c, d = a.parentNode;
            ea(a),
            f(new ca(b),
            function(b) {
                c ? d.insertBefore(b, c.nextSibling) : d.replaceChild(b, a),
                c = b
            })
        },
        children: function(a) {
            var b = [];
            return f(a.childNodes,
            function(a) {
                1 === a.nodeType && b.push(a)
            }),
            b
        },
        contents: function(a) {
            return a.contentDocument || a.childNodes || []
        },
        append: function(a, b) {
            f(new ca(b),
            function(b) {
                1 !== a.nodeType && 11 !== a.nodeType || a.appendChild(b)
            })
        },
        prepend: function(a, b) {
            if (1 === a.nodeType) {
                var c = a.firstChild;
                f(new ca(b),
                function(b) {
                    a.insertBefore(b, c)
                })
            }
        },
        wrap: function(a, b) {
            b = Vb(b)[0];
            var c = a.parentNode;
            c && c.replaceChild(b, a),
            b.appendChild(a)
        },
        remove: function(a) {
            ea(a);
            var b = a.parentNode;
            b && b.removeChild(a)
        },
        after: function(a, b) {
            var c = a,
            d = a.parentNode;
            f(new ca(b),
            function(a) {
                d.insertBefore(a, c.nextSibling),
                c = a
            })
        },
        addClass: la,
        removeClass: ka,
        toggleClass: function(a, b, c) {
            b && f(b.split(" "),
            function(b) {
                var d = c;
                r(d) && (d = !ja(a, b)),
                (d ? la: ka)(a, b)
            })
        },
        parent: function(a) {
            return (a = a.parentNode) && 11 !== a.nodeType ? a: null
        },
        next: function(a) {
            if (a.nextElementSibling) return a.nextElementSibling;
            for (a = a.nextSibling; null != a && 1 !== a.nodeType;) a = a.nextSibling;
            return a
        },
        find: function(a, b) {
            return a.getElementsByTagName ? a.getElementsByTagName(b) : []
        },
        clone: da,
        triggerHandler: function(a, b, c) {
            var d, e;
            d = b.type || b;
            var g = (ha(a, "events") || {})[d];
            g && (d = {
                preventDefault: function() {
                    this.defaultPrevented = !0
                },
                isDefaultPrevented: function() {
                    return ! 0 === this.defaultPrevented
                },
                stopPropagation: o,
                type: d,
                target: a
            },
            b.type && (d = l(d, b)), b = F(g), e = c ? [d].concat(c) : [d], f(b,
            function(b) {
                b.apply(a, e)
            }))
        }
    },
    function(a, b) {
        ca.prototype[b] = function(b, c, d) {
            for (var e, f = 0; f < this.length; f++) r(e) ? (e = a(this[f], b, c, d), s(e) && (e = Vb(e))) : ma(e, a(this[f], b, c, d));
            return s(e) ? e: this
        },
        ca.prototype.bind = ca.prototype.on,
        ca.prototype.unbind = ca.prototype.off
    }),
    ta.prototype = {
        put: function(a, b) {
            this[sa(a, this.nextUid)] = b
        },
        get: function(a) {
            return this[sa(a, this.nextUid)]
        },
        remove: function(a) {
            var b = this[a = sa(a, this.nextUid)];
            return delete this[a],
            b
        }
    };
    var Bc = /^function\s*[^\(]*\(\s*([^\)]*)\)/m,
    Cc = /,/,
    Dc = /^\s*(_?)(\S+?)\1\s*$/,
    Ec = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,
    Fc = d("$injector"),
    Gc = d("$animate"),
    Hc = ["$provide",
    function(a) {
        this.$$selectors = {},
        this.register = function(b, c) {
            var d = b + "-animation";
            if (b && "." != b.charAt(0)) throw Gc("notcsel", b);
            this.$$selectors[b.substr(1)] = d,
            a.factory(d, c)
        },
        this.classNameFilter = function(a) {
            return 1 === arguments.length && (this.$$classNameFilter = a instanceof RegExp ? a: null),
            this.$$classNameFilter
        },
        this.$get = ["$timeout", "$$asyncCallback",
        function(a, b) {
            return {
                enter: function(a, c, d, e) {
                    d ? d.after(a) : (c && c[0] || (c = d.parent()), c.append(a)),
                    e && b(e)
                },
                leave: function(a, c) {
                    a.remove(),
                    c && b(c)
                },
                move: function(a, b, c, d) {
                    this.enter(a, b, c, d)
                },
                addClass: function(a, c, d) {
                    c = u(c) ? c: hc(c) ? c.join(" ") : "",
                    f(a,
                    function(a) {
                        la(a, c)
                    }),
                    d && b(d)
                },
                removeClass: function(a, c, d) {
                    c = u(c) ? c: hc(c) ? c.join(" ") : "",
                    f(a,
                    function(a) {
                        ka(a, c)
                    }),
                    d && b(d)
                },
                setClass: function(a, c, d, e) {
                    f(a,
                    function(a) {
                        la(a, c),
                        ka(a, d)
                    }),
                    e && b(e)
                },
                enabled: o
            }
        }]
    }],
    Ic = d("$compile");
    Ca.$inject = ["$provide", "$$sanitizeUriProvider"];
    var Jc = /^(x[\:\-_]|data[\:\-_])/i,
    Kc = d("$interpolate"),
    Lc = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
    Mc = {
        http: 80,
        https: 443,
        ftp: 21
    },
    Nc = d("$location");
    _a.prototype = $a.prototype = Za.prototype = {
        $$html5: !1,
        $$replace: !1,
        absUrl: ab("$$absUrl"),
        url: function(a) {
            return r(a) ? this.$$url: (a = Lc.exec(a), a[1] && this.path(decodeURIComponent(a[1])), (a[2] || a[1]) && this.search(a[3] || ""), this.hash(a[5] || ""), this)
        },
        protocol: ab("$$protocol"),
        host: ab("$$host"),
        port: ab("$$port"),
        path: bb("$$path",
        function(a) {
            return a = null !== a ? a.toString() : "",
            "/" == a.charAt(0) ? a: "/" + a
        }),
        search: function(a, b) {
            switch (arguments.length) {
            case 0:
                return this.$$search;
            case 1:
                if (u(a) || v(a)) a = a.toString(),
                this.$$search = O(a);
                else {
                    if (!t(a)) throw Nc("isrcharg");
                    f(a,
                    function(b, c) {
                        null == b && delete a[c]
                    }),
                    this.$$search = a
                }
                break;
            default:
                r(b) || null === b ? delete this.$$search[a] : this.$$search[a] = b
            }
            return this.$$compose(),
            this
        },
        hash: bb("$$hash",
        function(a) {
            return null !== a ? a.toString() : ""
        }),
        replace: function() {
            return this.$$replace = !0,
            this
        }
    };
    var Oc, Pc = d("$parse"),
    Qc = {},
    Rc = Function.prototype.call,
    Sc = Function.prototype.apply,
    Tc = Function.prototype.bind,
    Uc = {
        "null": function() {
            return null
        },
        "true": function() {
            return ! 0
        },
        "false": function() {
            return ! 1
        },
        undefined: o,
        "+": function(a, b, d, e) {
            return d = d(a, b),
            e = e(a, b),
            s(d) ? s(e) ? d + e: d: s(e) ? e: c
        },
        "-": function(a, b, c, d) {
            return c = c(a, b),
            d = d(a, b),
            (s(c) ? c: 0) - (s(d) ? d: 0)
        },
        "*": function(a, b, c, d) {
            return c(a, b) * d(a, b)
        },
        "/": function(a, b, c, d) {
            return c(a, b) / d(a, b)
        },
        "%": function(a, b, c, d) {
            return c(a, b) % d(a, b)
        },
        "^": function(a, b, c, d) {
            return c(a, b) ^ d(a, b)
        },
        "=": o,
        "===": function(a, b, c, d) {
            return c(a, b) === d(a, b)
        },
        "!==": function(a, b, c, d) {
            return c(a, b) !== d(a, b)
        },
        "==": function(a, b, c, d) {
            return c(a, b) == d(a, b)
        },
        "!=": function(a, b, c, d) {
            return c(a, b) != d(a, b)
        },
        "<": function(a, b, c, d) {
            return c(a, b) < d(a, b)
        },
        ">": function(a, b, c, d) {
            return c(a, b) > d(a, b)
        },
        "<=": function(a, b, c, d) {
            return c(a, b) <= d(a, b)
        },
        ">=": function(a, b, c, d) {
            return c(a, b) >= d(a, b)
        },
        "&&": function(a, b, c, d) {
            return c(a, b) && d(a, b)
        },
        "||": function(a, b, c, d) {
            return c(a, b) || d(a, b)
        },
        "&": function(a, b, c, d) {
            return c(a, b) & d(a, b)
        },
        "|": function(a, b, c, d) {
            return d(a, b)(a, b, c(a, b))
        },
        "!": function(a, b, c) {
            return ! c(a, b)
        }
    },
    Vc = {
        n: "\n",
        f: "\f",
        r: "\r",
        t: "	",
        v: "",
        "'": "'",
        '"': '"'
    },
    Wc = function(a) {
        this.options = a
    };
    Wc.prototype = {
        constructor: Wc,
        lex: function(a) {
            for (this.text = a, this.index = 0, this.ch = c, this.lastCh = ":", this.tokens = []; this.index < this.text.length;) {
                if (this.ch = this.text.charAt(this.index), this.is("\"'")) this.readString(this.ch);
                else if (this.isNumber(this.ch) || this.is(".") && this.isNumber(this.peek())) this.readNumber();
                else if (this.isIdent(this.ch)) this.readIdent();
                else if (this.is("(){}[].,;:?")) this.tokens.push({
                    index: this.index,
                    text: this.ch
                }),
                this.index++;
                else {
                    if (this.isWhitespace(this.ch)) {
                        this.index++;
                        continue
                    }
                    a = this.ch + this.peek();
                    var b = a + this.peek(2),
                    d = Uc[this.ch],
                    e = Uc[a],
                    f = Uc[b];
                    f ? (this.tokens.push({
                        index: this.index,
                        text: b,
                        fn: f
                    }), this.index += 3) : e ? (this.tokens.push({
                        index: this.index,
                        text: a,
                        fn: e
                    }), this.index += 2) : d ? (this.tokens.push({
                        index: this.index,
                        text: this.ch,
                        fn: d
                    }), this.index += 1) : this.throwError("Unexpected next character ", this.index, this.index + 1)
                }
                this.lastCh = this.ch
            }
            return this.tokens
        },
        is: function(a) {
            return - 1 !== a.indexOf(this.ch)
        },
        was: function(a) {
            return - 1 !== a.indexOf(this.lastCh)
        },
        peek: function(a) {
            return a = a || 1,
            this.index + a < this.text.length ? this.text.charAt(this.index + a) : !1
        },
        isNumber: function(a) {
            return a >= "0" && "9" >= a
        },
        isWhitespace: function(a) {
            return " " === a || "\r" === a || "	" === a || "\n" === a || "" === a || " " === a
        },
        isIdent: function(a) {
            return a >= "a" && "z" >= a || a >= "A" && "Z" >= a || "_" === a || "$" === a
        },
        isExpOperator: function(a) {
            return "-" === a || "+" === a || this.isNumber(a)
        },
        throwError: function(a, b, c) {
            throw c = c || this.index,
            b = s(b) ? "s " + b + "-" + this.index + " [" + this.text.substring(b, c) + "]": " " + c,
            Pc("lexerr", a, b, this.text)
        },
        readNumber: function() {
            for (var a = "",
            b = this.index; this.index < this.text.length;) {
                var c = $b(this.text.charAt(this.index));
                if ("." == c || this.isNumber(c)) a += c;
                else {
                    var d = this.peek();
                    if ("e" == c && this.isExpOperator(d)) a += c;
                    else if (this.isExpOperator(c) && d && this.isNumber(d) && "e" == a.charAt(a.length - 1)) a += c;
                    else {
                        if (!this.isExpOperator(c) || d && this.isNumber(d) || "e" != a.charAt(a.length - 1)) break;
                        this.throwError("Invalid exponent")
                    }
                }
                this.index++
            }
            a *= 1,
            this.tokens.push({
                index: b,
                text: a,
                literal: !0,
                constant: !0,
                fn: function() {
                    return a
                }
            })
        },
        readIdent: function() {
            for (var a, b, c, d, e = this,
            f = "",
            g = this.index; this.index < this.text.length && (d = this.text.charAt(this.index), "." === d || this.isIdent(d) || this.isNumber(d));)"." === d && (a = this.index),
            f += d,
            this.index++;
            if (a) for (b = this.index; b < this.text.length;) {
                if (d = this.text.charAt(b), "(" === d) {
                    c = f.substr(a - g + 1),
                    f = f.substr(0, a - g),
                    this.index = b;
                    break
                }
                if (!this.isWhitespace(d)) break;
                b++
            }
            if (g = {
                index: g,
                text: f
            },
            Uc.hasOwnProperty(f)) g.fn = Uc[f],
            g.literal = !0,
            g.constant = !0;
            else {
                var h = lb(f, this.options, this.text);
                g.fn = l(function(a, b) {
                    return h(a, b)
                },
                {
                    assign: function(a, b) {
                        return hb(a, f, b, e.text, e.options)
                    }
                })
            }
            this.tokens.push(g),
            c && (this.tokens.push({
                index: a,
                text: "."
            }), this.tokens.push({
                index: a + 1,
                text: c
            }))
        },
        readString: function(a) {
            var b = this.index;
            this.index++;
            for (var c = "",
            d = a,
            e = !1; this.index < this.text.length;) {
                var f = this.text.charAt(this.index),
                d = d + f;
                if (e)"u" === f ? (e = this.text.substring(this.index + 1, this.index + 5), e.match(/[\da-f]{4}/i) || this.throwError("Invalid unicode escape [\\u" + e + "]"), this.index += 4, c += String.fromCharCode(parseInt(e, 16))) : c += Vc[f] || f,
                e = !1;
                else if ("\\" === f) e = !0;
                else {
                    if (f === a) return this.index++,
                    void this.tokens.push({
                        index: b,
                        text: d,
                        string: c,
                        literal: !0,
                        constant: !0,
                        fn: function() {
                            return c
                        }
                    });
                    c += f
                }
                this.index++
            }
            this.throwError("Unterminated quote", b)
        }
    };
    var Xc = function(a, b, c) {
        this.lexer = a,
        this.$filter = b,
        this.options = c
    };
    Xc.ZERO = l(function() {
        return 0
    },
    {
        constant: !0
    }),
    Xc.prototype = {
        constructor: Xc,
        parse: function(a) {
            return this.text = a,
            this.tokens = this.lexer.lex(a),
            a = this.statements(),
            0 !== this.tokens.length && this.throwError("is an unexpected token", this.tokens[0]),
            a.literal = !!a.literal,
            a.constant = !!a.constant,
            a
        },
        primary: function() {
            var a;
            if (this.expect("(")) a = this.filterChain(),
            this.consume(")");
            else if (this.expect("[")) a = this.arrayDeclaration();
            else if (this.expect("{")) a = this.object();
            else {
                var b = this.expect(); (a = b.fn) || this.throwError("not a primary expression", b),
                a.literal = !!b.literal,
                a.constant = !!b.constant
            }
            for (var c; b = this.expect("(", "[", ".");)"(" === b.text ? (a = this.functionCall(a, c), c = null) : "[" === b.text ? (c = a, a = this.objectIndex(a)) : "." === b.text ? (c = a, a = this.fieldAccess(a)) : this.throwError("IMPOSSIBLE");
            return a
        },
        throwError: function(a, b) {
            throw Pc("syntax", b.text, a, b.index + 1, this.text, this.text.substring(b.index))
        },
        peekToken: function() {
            if (0 === this.tokens.length) throw Pc("ueoe", this.text);
            return this.tokens[0]
        },
        peek: function(a, b, c, d) {
            if (0 < this.tokens.length) {
                var e = this.tokens[0],
                f = e.text;
                if (f === a || f === b || f === c || f === d || !(a || b || c || d)) return e
            }
            return ! 1
        },
        expect: function(a, b, c, d) {
            return (a = this.peek(a, b, c, d)) ? (this.tokens.shift(), a) : !1
        },
        consume: function(a) {
            this.expect(a) || this.throwError("is unexpected, expecting [" + a + "]", this.peek())
        },
        unaryFn: function(a, b) {
            return l(function(c, d) {
                return a(c, d, b)
            },
            {
                constant: b.constant
            })
        },
        ternaryFn: function(a, b, c) {
            return l(function(d, e) {
                return a(d, e) ? b(d, e) : c(d, e)
            },
            {
                constant: a.constant && b.constant && c.constant
            })
        },
        binaryFn: function(a, b, c) {
            return l(function(d, e) {
                return b(d, e, a, c)
            },
            {
                constant: a.constant && c.constant
            })
        },
        statements: function() {
            for (var a = [];;) if (0 < this.tokens.length && !this.peek("}", ")", ";", "]") && a.push(this.filterChain()), !this.expect(";")) return 1 === a.length ? a[0] : function(b, c) {
                for (var d, e = 0; e < a.length; e++) {
                    var f = a[e];
                    f && (d = f(b, c))
                }
                return d
            }
        },
        filterChain: function() {
            for (var a, b = this.expression();;) {
                if (! (a = this.expect("|"))) return b;
                b = this.binaryFn(b, a.fn, this.filter())
            }
        },
        filter: function() {
            for (var a = this.expect(), b = this.$filter(a.text), c = [];;) {
                if (! (a = this.expect(":"))) {
                    var d = function(a, d, e) {
                        e = [e];
                        for (var f = 0; f < c.length; f++) e.push(c[f](a, d));
                        return b.apply(a, e)
                    };
                    return function() {
                        return d
                    }
                }
                c.push(this.expression())
            }
        },
        expression: function() {
            return this.assignment()
        },
        assignment: function() {
            var a, b, c = this.ternary();
            return (b = this.expect("=")) ? (c.assign || this.throwError("implies assignment but [" + this.text.substring(0, b.index) + "] can not be assigned to", b), a = this.ternary(),
            function(b, d) {
                return c.assign(b, a(b, d), d)
            }) : c
        },
        ternary: function() {
            var a, b, c = this.logicalOR();
            return this.expect("?") ? (a = this.assignment(), (b = this.expect(":")) ? this.ternaryFn(c, a, this.assignment()) : void this.throwError("expected :", b)) : c
        },
        logicalOR: function() {
            for (var a, b = this.logicalAND();;) {
                if (! (a = this.expect("||"))) return b;
                b = this.binaryFn(b, a.fn, this.logicalAND())
            }
        },
        logicalAND: function() {
            var a, b = this.equality();
            return (a = this.expect("&&")) && (b = this.binaryFn(b, a.fn, this.logicalAND())),
            b
        },
        equality: function() {
            var a, b = this.relational();
            return (a = this.expect("==", "!=", "===", "!==")) && (b = this.binaryFn(b, a.fn, this.equality())),
            b
        },
        relational: function() {
            var a, b = this.additive();
            return (a = this.expect("<", ">", "<=", ">=")) && (b = this.binaryFn(b, a.fn, this.relational())),
            b
        },
        additive: function() {
            for (var a, b = this.multiplicative(); a = this.expect("+", "-");) b = this.binaryFn(b, a.fn, this.multiplicative());
            return b
        },
        multiplicative: function() {
            for (var a, b = this.unary(); a = this.expect("*", "/", "%");) b = this.binaryFn(b, a.fn, this.unary());
            return b
        },
        unary: function() {
            var a;
            return this.expect("+") ? this.primary() : (a = this.expect("-")) ? this.binaryFn(Xc.ZERO, a.fn, this.unary()) : (a = this.expect("!")) ? this.unaryFn(a.fn, this.unary()) : this.primary()
        },
        fieldAccess: function(a) {
            var b = this,
            c = this.expect().text,
            d = lb(c, this.options, this.text);
            return l(function(b, c, e) {
                return d(e || a(b, c))
            },
            {
                assign: function(d, e, f) {
                    return (f = a(d, f)) || a.assign(d, f = {}),
                    hb(f, c, e, b.text, b.options)
                }
            })
        },
        objectIndex: function(a) {
            var b = this,
            d = this.expression();
            return this.consume("]"),
            l(function(e, f) {
                var g, h = a(e, f),
                i = fb(d(e, f), b.text);
                return eb(i, b.text),
                h ? ((h = gb(h[i], b.text)) && h.then && b.options.unwrapPromises && (g = h, "$$v" in h || (g.$$v = c, g.then(function(a) {
                    g.$$v = a
                })), h = h.$$v), h) : c
            },
            {
                assign: function(c, e, f) {
                    var g = eb(fb(d(c, f), b.text), b.text);
                    return (f = gb(a(c, f), b.text)) || a.assign(c, f = {}),
                    f[g] = e
                }
            })
        },
        functionCall: function(a, b) {
            var c = [];
            if (")" !== this.peekToken().text) do c.push(this.expression());
            while (this.expect(","));
            this.consume(")");
            var d = this;
            return function(e, f) {
                for (var g = [], h = b ? b(e, f) : e, i = 0; i < c.length; i++) g.push(gb(c[i](e, f), d.text));
                i = a(e, f, h) || o,
                gb(h, d.text);
                var j = d.text;
                if (i) {
                    if (i.constructor === i) throw Pc("isecfn", j);
                    if (i === Rc || i === Sc || Tc && i === Tc) throw Pc("isecff", j)
                }
                return g = i.apply ? i.apply(h, g) : i(g[0], g[1], g[2], g[3], g[4]),
                gb(g, d.text)
            }
        },
        arrayDeclaration: function() {
            var a = [],
            b = !0;
            if ("]" !== this.peekToken().text) do {
                if (this.peek("]")) break;
                var c = this.expression();
                a.push(c), c.constant || (b = !1)
            } while ( this . expect (","));
            return this.consume("]"),
            l(function(b, c) {
                for (var d = [], e = 0; e < a.length; e++) d.push(a[e](b, c));
                return d
            },
            {
                literal: !0,
                constant: b
            })
        },
        object: function() {
            var a = [],
            b = !0;
            if ("}" !== this.peekToken().text) do {
                if (this.peek("}")) break;
                var c = this.expect(), c = c.string || c.text;
                this.consume(":");
                var d = this.expression();
                a.push({
                    key: c,
                    value: d
                }), d.constant || (b = !1)
            } while ( this . expect (","));
            return this.consume("}"),
            l(function(b, c) {
                for (var d = {},
                e = 0; e < a.length; e++) {
                    var f = a[e];
                    d[f.key] = f.value(b, c)
                }
                return d
            },
            {
                literal: !0,
                constant: b
            })
        }
    };
    var Yc = {},
    Zc = {},
    $c = d("$sce"),
    _c = {
        HTML: "html",
        CSS: "css",
        URL: "url",
        RESOURCE_URL: "resourceUrl",
        JS: "js"
    },
    ad = b.createElement("a"),
    bd = yb(a.location.href, !0);
    Bb.$inject = ["$provide"],
    Db.$inject = ["$locale"],
    Eb.$inject = ["$locale"];
    var cd = ".",
    dd = {
        yyyy: Hb("FullYear", 4),
        yy: Hb("FullYear", 2, 0, !0),
        y: Hb("FullYear", 1),
        MMMM: Ib("Month"),
        MMM: Ib("Month", !0),
        MM: Hb("Month", 2, 1),
        M: Hb("Month", 1, 1),
        dd: Hb("Date", 2),
        d: Hb("Date", 1),
        HH: Hb("Hours", 2),
        H: Hb("Hours", 1),
        hh: Hb("Hours", 2, -12),
        h: Hb("Hours", 1, -12),
        mm: Hb("Minutes", 2),
        m: Hb("Minutes", 1),
        ss: Hb("Seconds", 2),
        s: Hb("Seconds", 1),
        sss: Hb("Milliseconds", 3),
        EEEE: Ib("Day"),
        EEE: Ib("Day", !0),
        a: function(a, b) {
            return 12 > a.getHours() ? b.AMPMS[0] : b.AMPMS[1]
        },
        Z: function(a) {
            return a = -1 * a.getTimezoneOffset(),
            a = (a >= 0 ? "+": "") + (Gb(Math[a > 0 ? "floor": "ceil"](a / 60), 2) + Gb(Math.abs(a % 60), 2))
        }
    },
    ed = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,
    fd = /^\-?\d+$/;
    Jb.$inject = ["$locale"];
    var gd = q($b),
    hd = q(ac);
    Mb.$inject = ["$parse"];
    var id = q({
        restrict: "E",
        compile: function(a, c) {
            return 8 >= Ub && (c.href || c.name || c.$set("href", ""), a.append(b.createComment("IE fix"))),
            c.href || c.xlinkHref || c.name ? void 0 : function(a, b) {
                var c = "[object SVGAnimatedString]" === dc.call(b.prop("href")) ? "xlink:href": "href";
                b.on("click",
                function(a) {
                    b.attr(c) || a.preventDefault()
                })
            }
        }
    }),
    jd = {};
    f(zc,
    function(a, b) {
        if ("multiple" != a) {
            var c = Da("ng-" + b);
            jd[c] = function() {
                return {
                    priority: 100,
                    link: function(a, d, e) {
                        a.$watch(e[c],
                        function(a) {
                            e.$set(b, !!a)
                        })
                    }
                }
            }
        }
    }),
    f(["src", "srcset", "href"],
    function(a) {
        var b = Da("ng-" + a);
        jd[b] = function() {
            return {
                priority: 99,
                link: function(c, d, e) {
                    var f = a,
                    g = a;
                    "href" === a && "[object SVGAnimatedString]" === dc.call(d.prop("href")) && (g = "xlinkHref", e.$attr[g] = "xlink:href", f = null),
                    e.$observe(b,
                    function(b) {
                        b ? (e.$set(g, b), Ub && f && d.prop(f, e[g])) : "href" === a && e.$set(g, null)
                    })
                }
            }
        }
    });
    var kd = {
        $addControl: o,
        $removeControl: o,
        $setValidity: o,
        $setDirty: o,
        $setPristine: o
    };
    Ob.$inject = ["$element", "$attrs", "$scope", "$animate"];
    var ld = function(a) {
        return ["$timeout",
        function(b) {
            return {
                name: "form",
                restrict: a ? "EAC": "E",
                controller: Ob,
                compile: function() {
                    return {
                        pre: function(a, d, e, f) {
                            if (!e.action) {
                                var g = function(a) {
                                    a.preventDefault ? a.preventDefault() : a.returnValue = !1
                                };
                                oc(d[0], "submit", g),
                                d.on("$destroy",
                                function() {
                                    b(function() {
                                        pc(d[0], "submit", g)
                                    },
                                    0, !1)
                                })
                            }
                            var h = d.parent().controller("form"),
                            i = e.name || e.ngForm;
                            i && hb(a, i, f, i),
                            h && d.on("$destroy",
                            function() {
                                h.$removeControl(f),
                                i && hb(a, i, c, i),
                                l(f, kd)
                            })
                        }
                    }
                }
            }
        }]
    },
    md = ld(),
    nd = ld(!0),
    od = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,
    pd = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,
    qd = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,
    rd = {
        text: Sb,
        number: function(a, b, d, e, f, g) {
            Sb(a, b, d, e, f, g),
            e.$parsers.push(function(a) {
                var b = e.$isEmpty(a);
                return b || qd.test(a) ? (e.$setValidity("number", !0), "" === a ? null: b ? a: parseFloat(a)) : (e.$setValidity("number", !1), c)
            }),
            Rb(e, "number", sd, null, e.$$validityState),
            e.$formatters.push(function(a) {
                return e.$isEmpty(a) ? "": "" + a
            }),
            d.min && (a = function(a) {
                var b = parseFloat(d.min);
                return Pb(e, "min", e.$isEmpty(a) || a >= b, a)
            },
            e.$parsers.push(a), e.$formatters.push(a)),
            d.max && (a = function(a) {
                var b = parseFloat(d.max);
                return Pb(e, "max", e.$isEmpty(a) || b >= a, a)
            },
            e.$parsers.push(a), e.$formatters.push(a)),
            e.$formatters.push(function(a) {
                return Pb(e, "number", e.$isEmpty(a) || v(a), a)
            })
        },
        url: function(a, b, c, d, e, f) {
            Sb(a, b, c, d, e, f),
            a = function(a) {
                return Pb(d, "url", d.$isEmpty(a) || od.test(a), a)
            },
            d.$formatters.push(a),
            d.$parsers.push(a)
        },
        email: function(a, b, c, d, e, f) {
            Sb(a, b, c, d, e, f),
            a = function(a) {
                return Pb(d, "email", d.$isEmpty(a) || pd.test(a), a)
            },
            d.$formatters.push(a),
            d.$parsers.push(a)
        },
        radio: function(a, b, c, d) {
            r(c.name) && b.attr("name", j()),
            b.on("click",
            function() {
                b[0].checked && a.$apply(function() {
                    d.$setViewValue(c.value)
                })
            }),
            d.$render = function() {
                b[0].checked = c.value == d.$viewValue
            },
            c.$observe("value", d.$render)
        },
        checkbox: function(a, b, c, d) {
            var e = c.ngTrueValue,
            f = c.ngFalseValue;
            u(e) || (e = !0),
            u(f) || (f = !1),
            b.on("click",
            function() {
                a.$apply(function() {
                    d.$setViewValue(b[0].checked)
                })
            }),
            d.$render = function() {
                b[0].checked = d.$viewValue
            },
            d.$isEmpty = function(a) {
                return a !== e
            },
            d.$formatters.push(function(a) {
                return a === e
            }),
            d.$parsers.push(function(a) {
                return a ? e: f
            })
        },
        hidden: o,
        button: o,
        submit: o,
        reset: o,
        file: o
    },
    sd = ["badInput"],
    td = ["$browser", "$sniffer",
    function(a, b) {
        return {
            restrict: "E",
            require: "?ngModel",
            link: function(c, d, e, f) {
                f && (rd[$b(e.type)] || rd.text)(c, d, e, f, b, a)
            }
        }
    }],
    ud = "ng-valid",
    vd = "ng-invalid",
    wd = "ng-pristine",
    xd = "ng-dirty",
    yd = ["$scope", "$exceptionHandler", "$attrs", "$element", "$parse", "$animate",
    function(a, b, c, e, g, h) {
        function i(a, b) {
            b = b ? "-" + U(b, "-") : "",
            h.removeClass(e, (a ? vd: ud) + b),
            h.addClass(e, (a ? ud: vd) + b)
        }
        this.$modelValue = this.$viewValue = Number.NaN,
        this.$parsers = [],
        this.$formatters = [],
        this.$viewChangeListeners = [],
        this.$pristine = !0,
        this.$dirty = !1,
        this.$valid = !0,
        this.$invalid = !1,
        this.$name = c.name;
        var j = g(c.ngModel),
        k = j.assign;
        if (!k) throw d("ngModel")("nonassign", c.ngModel, M(e));
        this.$render = o,
        this.$isEmpty = function(a) {
            return r(a) || "" === a || null === a || a !== a
        };
        var l = e.inheritedData("$formController") || kd,
        m = 0,
        n = this.$error = {};
        e.addClass(wd),
        i(!0),
        this.$setValidity = function(a, b) {
            n[a] !== !b && (b ? (n[a] && m--, m || (i(!0), this.$valid = !0, this.$invalid = !1)) : (i(!1), this.$invalid = !0, this.$valid = !1, m++), n[a] = !b, i(b, a), l.$setValidity(a, b, this))
        },
        this.$setPristine = function() {
            this.$dirty = !1,
            this.$pristine = !0,
            h.removeClass(e, xd),
            h.addClass(e, wd)
        },
        this.$setViewValue = function(c) {
            this.$viewValue = c,
            this.$pristine && (this.$dirty = !0, this.$pristine = !1, h.removeClass(e, wd), h.addClass(e, xd), l.$setDirty()),
            f(this.$parsers,
            function(a) {
                c = a(c)
            }),
            this.$modelValue !== c && (this.$modelValue = c, k(a, c), f(this.$viewChangeListeners,
            function(a) {
                try {
                    a()
                } catch(c) {
                    b(c)
                }
            }))
        };
        var p = this;
        a.$watch(function() {
            var b = j(a);
            if (p.$modelValue !== b) {
                var c = p.$formatters,
                d = c.length;
                for (p.$modelValue = b; d--;) b = c[d](b);
                p.$viewValue !== b && (p.$viewValue = b, p.$render())
            }
            return b
        })
    }],
    zd = function() {
        return {
            require: ["ngModel", "^?form"],
            controller: yd,
            link: function(a, b, c, d) {
                var e = d[0],
                f = d[1] || kd;
                f.$addControl(e),
                a.$on("$destroy",
                function() {
                    f.$removeControl(e)
                })
            }
        }
    },
    Ad = q({
        require: "ngModel",
        link: function(a, b, c, d) {
            d.$viewChangeListeners.push(function() {
                a.$eval(c.ngChange)
            })
        }
    }),
    Bd = function() {
        return {
            require: "?ngModel",
            link: function(a, b, c, d) {
                if (d) {
                    c.required = !0;
                    var e = function(a) {
                        return c.required && d.$isEmpty(a) ? void d.$setValidity("required", !1) : (d.$setValidity("required", !0), a)
                    };
                    d.$formatters.push(e),
                    d.$parsers.unshift(e),
                    c.$observe("required",
                    function() {
                        e(d.$viewValue)
                    })
                }
            }
        }
    },
    Cd = function() {
        return {
            require: "ngModel",
            link: function(a, b, d, e) {
                var g = (a = /\/(.*)\//.exec(d.ngList)) && RegExp(a[1]) || d.ngList || ",";
                e.$parsers.push(function(a) {
                    if (!r(a)) {
                        var b = [];
                        return a && f(a.split(g),
                        function(a) {
                            a && b.push(ic(a))
                        }),
                        b
                    }
                }),
                e.$formatters.push(function(a) {
                    return hc(a) ? a.join(", ") : c
                }),
                e.$isEmpty = function(a) {
                    return ! a || !a.length
                }
            }
        }
    },
    Dd = /^(true|false|\d+)$/,
    Ed = function() {
        return {
            priority: 100,
            compile: function(a, b) {
                return Dd.test(b.ngValue) ?
                function(a, b, c) {
                    c.$set("value", a.$eval(c.ngValue))
                }: function(a, b, c) {
                    a.$watch(c.ngValue,
                    function(a) {
                        c.$set("value", a)
                    })
                }
            }
        }
    },
    Fd = Nb({
        compile: function(a) {
            return a.addClass("ng-binding"),
            function(a, b, d) {
                b.data("$binding", d.ngBind),
                a.$watch(d.ngBind,
                function(a) {
                    b.text(a == c ? "": a)
                })
            }
        }
    }),
    Gd = ["$interpolate",
    function(a) {
        return function(b, c, d) {
            b = a(c.attr(d.$attr.ngBindTemplate)),
            c.addClass("ng-binding").data("$binding", b),
            d.$observe("ngBindTemplate",
            function(a) {
                c.text(a)
            })
        }
    }],
    Hd = ["$sce", "$parse",
    function(a, b) {
        return {
            compile: function(c) {
                return c.addClass("ng-binding"),
                function(c, d, e) {
                    d.data("$binding", e.ngBindHtml);
                    var f = b(e.ngBindHtml);
                    c.$watch(function() {
                        return (f(c) || "").toString()
                    },
                    function(b) {
                        d.html(a.getTrustedHtml(f(c)) || "")
                    })
                }
            }
        }
    }],
    Id = Tb("", !0),
    Jd = Tb("Odd", 0),
    Kd = Tb("Even", 1),
    Ld = Nb({
        compile: function(a, b) {
            b.$set("ngCloak", c),
            a.removeClass("ng-cloak")
        }
    }),
    Md = [function() {
        return {
            scope: !0,
            controller: "@",
            priority: 500
        }
    }],
    Nd = {},
    Od = {
        blur: !0,
        focus: !0
    };
    f("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),
    function(a) {
        var b = Da("ng-" + a);
        Nd[b] = ["$parse", "$rootScope",
        function(c, d) {
            return {
                compile: function(e, f) {
                    var g = c(f[b], !0);
                    return function(b, c) {
                        c.on(a,
                        function(c) {
                            var e = function() {
                                g(b, {
                                    $event: c
                                })
                            };
                            Od[a] && d.$$phase ? b.$evalAsync(e) : b.$apply(e)
                        })
                    }
                }
            }
        }]
    });
    var Pd = ["$animate",
    function(a) {
        return {
            transclude: "element",
            priority: 600,
            terminal: !0,
            restrict: "A",
            $$tlb: !0,
            link: function(c, d, e, f, g) {
                var h, i, j;
                c.$watch(e.ngIf,
                function(f) {
                    L(f) ? i || (i = c.$new(), g(i,
                    function(c) {
                        c[c.length++] = b.createComment(" end ngIf: " + e.ngIf + " "),
                        h = {
                            clone: c
                        },
                        a.enter(c, d.parent(), d)
                    })) : (j && (j.remove(), j = null), i && (i.$destroy(), i = null), h && (j = Z(h.clone), a.leave(j,
                    function() {
                        j = null
                    }), h = null))
                })
            }
        }
    }],
    Qd = ["$http", "$templateCache", "$anchorScroll", "$animate", "$sce",
    function(a, b, c, d, e) {
        return {
            restrict: "ECA",
            priority: 400,
            terminal: !0,
            transclude: "element",
            controller: fc.noop,
            compile: function(f, g) {
                var h = g.ngInclude || g.src,
                i = g.onload || "",
                j = g.autoscroll;
                return function(f, g, k, l, m) {
                    var n, o, p, q = 0,
                    r = function() {
                        o && (o.remove(), o = null),
                        n && (n.$destroy(), n = null),
                        p && (d.leave(p,
                        function() {
                            o = null
                        }), o = p, p = null)
                    };
                    f.$watch(e.parseAsResourceUrl(h),
                    function(e) {
                        var h = function() { ! s(j) || j && !f.$eval(j) || c()
                        },
                        k = ++q;
                        e ? (a.get(e, {
                            cache: b
                        }).success(function(a) {
                            if (k === q) {
                                var b = f.$new();
                                l.template = a,
                                a = m(b,
                                function(a) {
                                    r(),
                                    d.enter(a, null, g, h)
                                }),
                                n = b,
                                p = a,
                                n.$emit("$includeContentLoaded"),
                                f.$eval(i)
                            }
                        }).error(function() {
                            k === q && r()
                        }), f.$emit("$includeContentRequested")) : (r(), l.template = null)
                    })
                }
            }
        }
    }],
    Rd = ["$compile",
    function(a) {
        return {
            restrict: "ECA",
            priority: -400,
            require: "ngInclude",
            link: function(b, c, d, e) {
                c.html(e.template),
                a(c.contents())(b)
            }
        }
    }],
    Sd = Nb({
        priority: 450,
        compile: function() {
            return {
                pre: function(a, b, c) {
                    a.$eval(c.ngInit)
                }
            }
        }
    }),
    Td = Nb({
        terminal: !0,
        priority: 1e3
    }),
    Ud = ["$locale", "$interpolate",
    function(a, b) {
        var c = /{}/g;
        return {
            restrict: "EA",
            link: function(d, e, g) {
                var h = g.count,
                i = g.$attr.when && e.attr(g.$attr.when),
                j = g.offset || 0,
                k = d.$eval(i) || {},
                l = {},
                m = b.startSymbol(),
                n = b.endSymbol(),
                o = /^when(Minus)?(.+)$/;
                f(g,
                function(a, b) {
                    o.test(b) && (k[$b(b.replace("when", "").replace("Minus", "-"))] = e.attr(g.$attr[b]))
                }),
                f(k,
                function(a, d) {
                    l[d] = b(a.replace(c, m + h + "-" + j + n))
                }),
                d.$watch(function() {
                    var b = parseFloat(d.$eval(h));
                    return isNaN(b) ? "": (b in k || (b = a.pluralCat(b - j)), l[b](d, e, !0))
                },
                function(a) {
                    e.text(a)
                })
            }
        }
    }],
    Vd = ["$parse", "$animate",
    function(a, c) {
        var g = d("ngRepeat");
        return {
            transclude: "element",
            priority: 1e3,
            terminal: !0,
            $$tlb: !0,
            link: function(d, h, i, j, k) {
                var l, m, n, o, p, q, r = i.ngRepeat,
                s = r.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),
                t = {
                    $id: sa
                };
                if (!s) throw g("iexp", r);
                if (i = s[1], j = s[2], (s = s[3]) ? (l = a(s), m = function(a, b, c) {
                    return q && (t[q] = a),
                    t[p] = b,
                    t.$index = c,
                    l(d, t)
                }) : (n = function(a, b) {
                    return sa(b)
                },
                o = function(a) {
                    return a
                }), s = i.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/), !s) throw g("iidexp", i);
                p = s[3] || s[1],
                q = s[2];
                var u = {};
                d.$watchCollection(j,
                function(a) {
                    var i, j, l, s, t, v, w, x, y, z, A = h[0],
                    B = {},
                    C = [];
                    if (e(a)) y = a,
                    x = m || n;
                    else {
                        x = m || o,
                        y = [];
                        for (v in a) a.hasOwnProperty(v) && "$" != v.charAt(0) && y.push(v);
                        y.sort()
                    }
                    for (s = y.length, j = C.length = y.length, i = 0; j > i; i++) if (v = a === y ? i: y[i], w = a[v], l = x(v, w, i), X(l, "`track by` id"), u.hasOwnProperty(l)) z = u[l],
                    delete u[l],
                    B[l] = z,
                    C[i] = z;
                    else {
                        if (B.hasOwnProperty(l)) throw f(C,
                        function(a) {
                            a && a.scope && (u[a.id] = a)
                        }),
                        g("dupes", r, l, J(w));
                        C[i] = {
                            id: l
                        },
                        B[l] = !1
                    }
                    for (v in u) u.hasOwnProperty(v) && (z = u[v], i = Z(z.clone), c.leave(i), f(i,
                    function(a) {
                        a.$$NG_REMOVED = !0
                    }), z.scope.$destroy());
                    for (i = 0, j = y.length; j > i; i++) {
                        if (v = a === y ? i: y[i], w = a[v], z = C[i], C[i - 1] && (A = C[i - 1].clone[C[i - 1].clone.length - 1]), z.scope) {
                            t = z.scope,
                            l = A;
                            do l = l.nextSibling;
                            while (l && l.$$NG_REMOVED);
                            z.clone[0] != l && c.move(Z(z.clone), null, Vb(A)),
                            A = z.clone[z.clone.length - 1]
                        } else t = d.$new();
                        t[p] = w,
                        q && (t[q] = v),
                        t.$index = i,
                        t.$first = 0 === i,
                        t.$last = i === s - 1,
                        t.$middle = !(t.$first || t.$last),
                        t.$odd = !(t.$even = 0 === (1 & i)),
                        z.scope || k(t,
                        function(a) {
                            a[a.length++] = b.createComment(" end ngRepeat: " + r + " "),
                            c.enter(a, null, Vb(A)),
                            A = a,
                            z.scope = t,
                            z.clone = a,
                            B[z.id] = z
                        })
                    }
                    u = B
                })
            }
        }
    }],
    Wd = ["$animate",
    function(a) {
        return function(b, c, d) {
            b.$watch(d.ngShow,
            function(b) {
                a[L(b) ? "removeClass": "addClass"](c, "ng-hide")
            })
        }
    }],
    Xd = ["$animate",
    function(a) {
        return function(b, c, d) {
            b.$watch(d.ngHide,
            function(b) {
                a[L(b) ? "addClass": "removeClass"](c, "ng-hide")
            })
        }
    }],
    Yd = Nb(function(a, b, c) {
        a.$watch(c.ngStyle,
        function(a, c) {
            c && a !== c && f(c,
            function(a, c) {
                b.css(c, "")
            }),
            a && b.css(a)
        },
        !0)
    }),
    Zd = ["$animate",
    function(a) {
        return {
            restrict: "EA",
            require: "ngSwitch",
            controller: ["$scope",
            function() {
                this.cases = {}
            }],
            link: function(b, c, d, e) {
                var g = [],
                h = [],
                i = [],
                j = [];
                b.$watch(d.ngSwitch || d.on,
                function(c) {
                    var k, l;
                    for (k = 0, l = i.length; l > k; ++k) i[k].remove();
                    for (k = i.length = 0, l = j.length; l > k; ++k) {
                        var m = h[k];
                        j[k].$destroy(),
                        i[k] = m,
                        a.leave(m,
                        function() {
                            i.splice(k, 1)
                        })
                    }
                    h.length = 0,
                    j.length = 0,
                    (g = e.cases["!" + c] || e.cases["?"]) && (b.$eval(d.change), f(g,
                    function(c) {
                        var d = b.$new();
                        j.push(d),
                        c.transclude(d,
                        function(b) {
                            var d = c.element;
                            h.push(b),
                            a.enter(b, d.parent(), d)
                        })
                    }))
                })
            }
        }
    }],
    $d = Nb({
        transclude: "element",
        priority: 800,
        require: "^ngSwitch",
        link: function(a, b, c, d, e) {
            d.cases["!" + c.ngSwitchWhen] = d.cases["!" + c.ngSwitchWhen] || [],
            d.cases["!" + c.ngSwitchWhen].push({
                transclude: e,
                element: b
            })
        }
    }),
    _d = Nb({
        transclude: "element",
        priority: 800,
        require: "^ngSwitch",
        link: function(a, b, c, d, e) {
            d.cases["?"] = d.cases["?"] || [],
            d.cases["?"].push({
                transclude: e,
                element: b
            })
        }
    }),
    ae = Nb({
        link: function(a, b, c, e, f) {
            if (!f) throw d("ngTransclude")("orphan", M(b));
            f(function(a) {
                b.empty(),
                b.append(a)
            })
        }
    }),
    be = ["$templateCache",
    function(a) {
        return {
            restrict: "E",
            terminal: !0,
            compile: function(b, c) {
                "text/ng-template" == c.type && a.put(c.id, b[0].text)
            }
        }
    }],
    ce = d("ngOptions"),
    de = q({
        terminal: !0
    }),
    ee = ["$compile", "$parse",
    function(a, d) {
        var e = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
        h = {
            $setViewValue: o
        };
        return {
            restrict: "E",
            require: ["select", "?ngModel"],
            controller: ["$element", "$scope", "$attrs",
            function(a, b, c) {
                var d, e = this,
                f = {},
                g = h;
                e.databound = c.ngModel,
                e.init = function(a, b, c) {
                    g = a,
                    d = c
                },
                e.addOption = function(b) {
                    X(b, '"option value"'),
                    f[b] = !0,
                    g.$viewValue == b && (a.val(b), d.parent() && d.remove())
                },
                e.removeOption = function(a) {
                    this.hasOption(a) && (delete f[a], g.$viewValue == a && this.renderUnknownOption(a))
                },
                e.renderUnknownOption = function(b) {
                    b = "? " + sa(b) + " ?",
                    d.val(b),
                    a.prepend(d),
                    a.val(b),
                    d.prop("selected", !0)
                },
                e.hasOption = function(a) {
                    return f.hasOwnProperty(a)
                },
                b.$on("$destroy",
                function() {
                    e.renderUnknownOption = o
                })
            }],
            link: function(h, i, j, k) {
                function l(a, b, c, d) {
                    c.$render = function() {
                        var a = c.$viewValue;
                        d.hasOption(a) ? (x.parent() && x.remove(), b.val(a), "" === a && p.prop("selected", !0)) : r(a) && p ? b.val("") : d.renderUnknownOption(a)
                    },
                    b.on("change",
                    function() {
                        a.$apply(function() {
                            x.parent() && x.remove(),
                            c.$setViewValue(b.val())
                        })
                    })
                }
                function m(a, b, c) {
                    var d;
                    c.$render = function() {
                        var a = new ta(c.$viewValue);
                        f(b.find("option"),
                        function(b) {
                            b.selected = s(a.get(b.value))
                        })
                    },
                    a.$watch(function() {
                        G(d, c.$viewValue) || (d = F(c.$viewValue), c.$render())
                    }),
                    b.on("change",
                    function() {
                        a.$apply(function() {
                            var a = [];
                            f(b.find("option"),
                            function(b) {
                                b.selected && a.push(b.value)
                            }),
                            c.$setViewValue(a)
                        })
                    })
                }
                function n(b, f, h) {
                    function i() {
                        var a, c, d, e, i, j = {
                            "": []
                        },
                        t = [""];
                        d = h.$modelValue,
                        e = r(b) || [];
                        var z, A, B, C = m ? g(e) : e;
                        if (A = {},
                        B = !1, q) if (c = h.$modelValue, x && hc(c)) for (B = new ta([]), a = {},
                        i = 0; i < c.length; i++) a[l] = c[i],
                        B.put(x(b, a), c[i]);
                        else B = new ta(c);
                        i = B;
                        var D, E;
                        for (B = 0; z = C.length, z > B; B++) {
                            if (c = B, m) {
                                if (c = C[B], "$" === c.charAt(0)) continue;
                                A[m] = c
                            }
                            A[l] = e[c],
                            a = n(b, A) || "",
                            (c = j[a]) || (c = j[a] = [], t.push(a)),
                            q ? a = s(i.remove(x ? x(b, A) : p(b, A))) : (x ? (a = {},
                            a[l] = d, a = x(b, a) === x(b, A)) : a = d === p(b, A), i = i || a),
                            D = k(b, A),
                            D = s(D) ? D: "",
                            c.push({
                                id: x ? x(b, A) : m ? C[B] : B,
                                label: D,
                                selected: a
                            })
                        }
                        for (q || (u || null === d ? j[""].unshift({
                            id: "",
                            label: "",
                            selected: !i
                        }) : i || j[""].unshift({
                            id: "?",
                            label: "",
                            selected: !0
                        })), A = 0, C = t.length; C > A; A++) {
                            for (a = t[A], c = j[a], y.length <= A ? (d = {
                                element: w.clone().attr("label", a),
                                label: c.label
                            },
                            e = [d], y.push(e), f.append(d.element)) : (e = y[A], d = e[0], d.label != a && d.element.attr("label", d.label = a)), D = null, B = 0, z = c.length; z > B; B++) a = c[B],
                            (i = e[B + 1]) ? (D = i.element, i.label !== a.label && (D.text(i.label = a.label), D.prop("label", i.label)), i.id !== a.id && D.val(i.id = a.id), D[0].selected !== a.selected && (D.prop("selected", i.selected = a.selected), Ub && D.prop("selected", i.selected))) : ("" === a.id && u ? E = u: (E = v.clone()).val(a.id).prop("selected", a.selected).attr("selected", a.selected).prop("label", a.label).text(a.label), e.push({
                                element: E,
                                label: a.label,
                                id: a.id,
                                selected: a.selected
                            }), o.addOption(a.label, E), D ? D.after(E) : d.element.append(E), D = E);
                            for (B++; e.length > B;) a = e.pop(),
                            o.removeOption(a.label),
                            a.element.remove()
                        }
                        for (; y.length > A;) y.pop()[0].element.remove()
                    }
                    var j;
                    if (! (j = t.match(e))) throw ce("iexp", t, M(f));
                    var k = d(j[2] || j[1]),
                    l = j[4] || j[6],
                    m = j[5],
                    n = d(j[3] || ""),
                    p = d(j[2] ? j[1] : l),
                    r = d(j[7]),
                    x = j[8] ? d(j[8]) : null,
                    y = [[{
                        element: f,
                        label: ""
                    }]];
                    u && (a(u)(b), u.removeClass("ng-scope"), u.remove()),
                    f.empty(),
                    f.on("change",
                    function() {
                        b.$apply(function() {
                            var a, d, e, g, j, k, n, o, s = r(b) || [],
                            t = {};
                            if (q) {
                                for (e = [], j = 0, n = y.length; n > j; j++) for (a = y[j], g = 1, k = a.length; k > g; g++) if ((d = a[g].element)[0].selected) {
                                    if (d = d.val(), m && (t[m] = d), x) for (o = 0; o < s.length && (t[l] = s[o], x(b, t) != d); o++);
                                    else t[l] = s[d];
                                    e.push(p(b, t))
                                }
                            } else if (d = f.val(), "?" == d) e = c;
                            else if ("" === d) e = null;
                            else if (x) {
                                for (o = 0; o < s.length; o++) if (t[l] = s[o], x(b, t) == d) {
                                    e = p(b, t);
                                    break
                                }
                            } else t[l] = s[d],
                            m && (t[m] = d),
                            e = p(b, t);
                            h.$setViewValue(e),
                            i()
                        })
                    }),
                    h.$render = i,
                    b.$watchCollection(r, i),
                    b.$watchCollection(function() {
                        var a = {},
                        c = r(b);
                        if (c) {
                            for (var d = Array(c.length), e = 0, f = c.length; f > e; e++) a[l] = c[e],
                            d[e] = k(b, a);
                            return d
                        }
                    },
                    i),
                    q && b.$watchCollection(function() {
                        return h.$modelValue
                    },
                    i)
                }
                if (k[1]) {
                    var o = k[0];
                    k = k[1];
                    var p, q = j.multiple,
                    t = j.ngOptions,
                    u = !1,
                    v = Vb(b.createElement("option")),
                    w = Vb(b.createElement("optgroup")),
                    x = v.clone();
                    j = 0;
                    for (var y = i.children(), z = y.length; z > j; j++) if ("" === y[j].value) {
                        p = u = y.eq(j);
                        break
                    }
                    o.init(k, u, x),
                    q && (k.$isEmpty = function(a) {
                        return ! a || 0 === a.length
                    }),
                    t ? n(h, i, k) : q ? m(h, i, k) : l(h, i, k, o)
                }
            }
        }
    }],
    fe = ["$interpolate",
    function(a) {
        var b = {
            addOption: o,
            removeOption: o
        };
        return {
            restrict: "E",
            priority: 100,
            compile: function(c, d) {
                if (r(d.value)) {
                    var e = a(c.text(), !0);
                    e || d.$set("value", c.text())
                }
                return function(a, c, d) {
                    var f = c.parent(),
                    g = f.data("$selectController") || f.parent().data("$selectController");
                    g && g.databound ? c.prop("selected", !1) : g = b,
                    e ? a.$watch(e,
                    function(a, b) {
                        d.$set("value", a),
                        a !== b && g.removeOption(b),
                        g.addOption(a)
                    }) : g.addOption(d.value),
                    c.on("$destroy",
                    function() {
                        g.removeOption(d.value)
                    })
                }
            }
        }
    }],
    ge = q({
        restrict: "E",
        terminal: !0
    });
    a.angular.bootstrap ? console.log("WARNING: Tried to load angular more than once.") : ((Wb = a.jQuery) && Wb.fn.on ? (Vb = Wb, l(Wb.fn, {
        scope: yc.scope,
        isolateScope: yc.isolateScope,
        controller: yc.controller,
        injector: yc.injector,
        inheritedData: yc.inheritedData
    }), ba("remove", !0, !0, !1), ba("empty", !1, !1, !1), ba("html", !1, !1, !0)) : Vb = ca, fc.element = Vb, _(fc), Vb(b).ready(function() {
        S(b, T)
    }))
} (window, document),
!window.angular.$$csp() && window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-block-transitions{transition:0s all!important;-webkit-transition:0s all!important;}.ng-hide-add-active,.ng-hide-remove{display:block!important;}</style>'),
function(a, b, c) {
    "use strict";
    function d(a, c, d) {
        return {
            restrict: "ECA",
            terminal: !0,
            priority: 400,
            transclude: "element",
            link: function(e, f, g, h, i) {
                function j() {
                    n && (n.remove(), n = null),
                    l && (l.$destroy(), l = null),
                    m && (d.leave(m,
                    function() {
                        n = null
                    }), n = m, m = null)
                }
                function k() {
                    var g = a.current && a.current.locals;
                    if (b.isDefined(g && g.$template)) {
                        var g = e.$new(),
                        h = a.current;
                        m = i(g,
                        function(a) {
                            d.enter(a, null, m || f,
                            function() { ! b.isDefined(o) || o && !e.$eval(o) || c()
                            }),
                            j()
                        }),
                        l = h.scope = g,
                        l.$emit("$viewContentLoaded"),
                        l.$eval(p)
                    } else j()
                }
                var l, m, n, o = g.autoscroll,
                p = g.onload || "";
                e.$on("$routeChangeSuccess", k),
                k()
            }
        }
    }
    function e(a, b, c) {
        return {
            restrict: "ECA",
            priority: -400,
            link: function(d, e) {
                var f = c.current,
                g = f.locals;
                e.html(g.$template);
                var h = a(e.contents());
                f.controller && (g.$scope = d, g = b(f.controller, g), f.controllerAs && (d[f.controllerAs] = g), e.data("$ngControllerController", g), e.children().data("$ngControllerController", g)),
                h(d)
            }
        }
    }
    a = b.module("ngRoute", ["ng"]).provider("$route",
    function() {
        function a(a, c) {
            return b.extend(new(b.extend(function() {},
            {
                prototype: a
            })), c)
        }
        function c(a, b) {
            var c = b.caseInsensitiveMatch,
            d = {
                originalPath: a,
                regexp: a
            },
            e = d.keys = [];
            return a = a.replace(/([().])/g, "\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,
            function(a, b, c, d) {
                return a = "?" === d ? d: null,
                d = "*" === d ? d: null,
                e.push({
                    name: c,
                    optional: !!a
                }),
                b = b || "",
                "" + (a ? "": b) + "(?:" + (a ? b: "") + (d && "(.+?)" || "([^/]+)") + (a || "") + ")" + (a || "")
            }).replace(/([\/$\*])/g, "\\$1"),
            d.regexp = RegExp("^" + a + "$", c ? "i": ""),
            d
        }
        var d = {};
        this.when = function(a, e) {
            if (d[a] = b.extend({
                reloadOnSearch: !0
            },
            e, a && c(a, e)), a) {
                var f = "/" == a[a.length - 1] ? a.substr(0, a.length - 1) : a + "/";
                d[f] = b.extend({
                    redirectTo: a
                },
                c(f, e))
            }
            return this
        },
        this.otherwise = function(a) {
            return this.when(null, a),
            this
        },
        this.$get = ["$rootScope", "$location", "$routeParams", "$q", "$injector", "$http", "$templateCache", "$sce",
        function(c, e, f, g, h, i, j, k) {
            function l() {
                var a = m(),
                d = p.current;
                a && d && a.$$route === d.$$route && b.equals(a.pathParams, d.pathParams) && !a.reloadOnSearch && !o ? (d.params = a.params, b.copy(d.params, f), c.$broadcast("$routeUpdate", d)) : (a || d) && (o = !1, c.$broadcast("$routeChangeStart", a, d), (p.current = a) && a.redirectTo && (b.isString(a.redirectTo) ? e.path(n(a.redirectTo, a.params)).search(a.params).replace() : e.url(a.redirectTo(a.pathParams, e.path(), e.search())).replace()), g.when(a).then(function() {
                    if (a) {
                        var c, d, e = b.extend({},
                        a.resolve);
                        return b.forEach(e,
                        function(a, c) {
                            e[c] = b.isString(a) ? h.get(a) : h.invoke(a)
                        }),
                        b.isDefined(c = a.template) ? b.isFunction(c) && (c = c(a.params)) : b.isDefined(d = a.templateUrl) && (b.isFunction(d) && (d = d(a.params)), d = k.getTrustedResourceUrl(d), b.isDefined(d) && (a.loadedTemplateUrl = d, c = i.get(d, {
                            cache: j
                        }).then(function(a) {
                            return a.data
                        }))),
                        b.isDefined(c) && (e.$template = c),
                        g.all(e)
                    }
                }).then(function(e) {
                    a == p.current && (a && (a.locals = e, b.copy(a.params, f)), c.$broadcast("$routeChangeSuccess", a, d));
                },
                function(b) {
                    a == p.current && c.$broadcast("$routeChangeError", a, d, b)
                }))
            }
            function m() {
                var c, f;
                return b.forEach(d,
                function(d, g) {
                    var h;
                    if (h = !f) {
                        var i = e.path();
                        h = d.keys;
                        var j = {};
                        if (d.regexp) if (i = d.regexp.exec(i)) {
                            for (var k = 1,
                            l = i.length; l > k; ++k) {
                                var m = h[k - 1],
                                n = i[k];
                                m && n && (j[m.name] = n)
                            }
                            h = j
                        } else h = null;
                        else h = null;
                        h = c = h
                    }
                    h && (f = a(d, {
                        params: b.extend({},
                        e.search(), c),
                        pathParams: c
                    }), f.$$route = d)
                }),
                f || d[null] && a(d[null], {
                    params: {},
                    pathParams: {}
                })
            }
            function n(a, c) {
                var d = [];
                return b.forEach((a || "").split(":"),
                function(a, b) {
                    if (0 === b) d.push(a);
                    else {
                        var e = a.match(/(\w+)(?:[?*])?(.*)/),
                        f = e[1];
                        d.push(c[f]),
                        d.push(e[2] || ""),
                        delete c[f]
                    }
                }),
                d.join("")
            }
            var o = !1,
            p = {
                routes: d,
                reload: function() {
                    o = !0,
                    c.$evalAsync(l)
                }
            };
            return c.$on("$locationChangeSuccess", l),
            p
        }]
    }),
    a.provider("$routeParams",
    function() {
        this.$get = function() {
            return {}
        }
    }),
    a.directive("ngView", d),
    a.directive("ngView", e),
    d.$inject = ["$route", "$anchorScroll", "$animate"],
    e.$inject = ["$compile", "$controller", "$route"]
} (window, window.angular),
function(a, b, c) {
    "use strict";
    function d(a, b, c) {
        e.directive(a, ["$parse", "$swipe",
        function(d, e) {
            var f = 75,
            g = .3,
            h = 30;
            return function(i, j, k) {
                function l(a) {
                    if (!m) return ! 1;
                    var c = Math.abs(a.y - m.y);
                    return a = (a.x - m.x) * b,
                    n && f > c && a > 0 && a > h && g > c / a
                }
                var m, n, o = d(k[a]);
                e.bind(j, {
                    start: function(a, b) {
                        m = a,
                        n = !0
                    },
                    cancel: function(a) {
                        n = !1
                    },
                    end: function(a, b) {
                        l(a) && i.$apply(function() {
                            j.triggerHandler(c),
                            o(i, {
                                $event: b
                            })
                        })
                    }
                })
            }
        }])
    }
    var e = b.module("ngTouch", []);
    e.factory("$swipe", [function() {
        function a(a) {
            var b = a.touches && a.touches.length ? a.touches: [a];
            return a = a.changedTouches && a.changedTouches[0] || a.originalEvent && a.originalEvent.changedTouches && a.originalEvent.changedTouches[0] || b[0].originalEvent || b[0],
            {
                x: a.clientX,
                y: a.clientY
            }
        }
        return {
            bind: function(b, c) {
                var d, e, f, g, h = !1;
                b.on("touchstart mousedown",
                function(b) {
                    f = a(b),
                    h = !0,
                    e = d = 0,
                    g = f,
                    c.start && c.start(f, b)
                }),
                b.on("touchcancel",
                function(a) {
                    h = !1,
                    c.cancel && c.cancel(a)
                }),
                b.on("touchmove mousemove",
                function(b) {
                    if (h && f) {
                        var i = a(b);
                        d += Math.abs(i.x - g.x),
                        e += Math.abs(i.y - g.y),
                        g = i,
                        10 > d && 10 > e || (e > d ? (h = !1, c.cancel && c.cancel(b)) : (b.preventDefault(), c.move && c.move(i, b)))
                    }
                }),
                b.on("touchend mouseup",
                function(b) {
                    h && (h = !1, c.end && c.end(a(b), b))
                })
            }
        }
    }]),
    e.config(["$provide",
    function(a) {
        a.decorator("ngClickDirective", ["$delegate",
        function(a) {
            return a.shift(),
            a
        }])
    }]),
    e.directive("ngClick", ["$parse", "$timeout", "$rootElement",
    function(a, c, d) {
        function e(a, b, c) {
            for (var d = 0; d < a.length; d += 2) if (Math.abs(a[d] - b) < l && Math.abs(a[d + 1] - c) < l) return a.splice(d, d + 2),
            !0;
            return ! 1
        }
        function f(a) {
            if (! (Date.now() - h > k)) {
                var b = a.touches && a.touches.length ? a.touches: [a],
                c = b[0].clientX,
                b = b[0].clientY;
                1 > c && 1 > b || j && j[0] === c && j[1] === b || (j && (j = null), "label" === a.target.tagName.toLowerCase() && (j = [c, b]), e(i, c, b) || (a.stopPropagation(), a.preventDefault(), a.target && a.target.blur()))
            }
        }
        function g(a) {
            a = a.touches && a.touches.length ? a.touches: [a];
            var b = a[0].clientX,
            d = a[0].clientY;
            i.push(b, d),
            c(function() {
                for (var a = 0; a < i.length; a += 2) if (i[a] == b && i[a + 1] == d) {
                    i.splice(a, a + 2);
                    break
                }
            },
            k, !1)
        }
        var h, i, j, k = 2500,
        l = 25,
        m = "ng-click-active";
        return function(c, j, k) {
            function l() {
                s = !1,
                j.removeClass(m)
            }
            var n, o, p, q, r = a(k.ngClick),
            s = !1;
            j.on("touchstart",
            function(a) {
                s = !0,
                n = a.target ? a.target: a.srcElement,
                3 == n.nodeType && (n = n.parentNode),
                j.addClass(m),
                o = Date.now(),
                a = a.touches && a.touches.length ? a.touches: [a],
                a = a[0].originalEvent || a[0],
                p = a.clientX,
                q = a.clientY
            }),
            j.on("touchmove",
            function(a) {
                l()
            }),
            j.on("touchcancel",
            function(a) {
                l()
            }),
            j.on("touchend",
            function(a) {
                var c = Date.now() - o,
                m = a.changedTouches && a.changedTouches.length ? a.changedTouches: a.touches && a.touches.length ? a.touches: [a],
                r = m[0].originalEvent || m[0],
                m = r.clientX,
                r = r.clientY,
                t = Math.sqrt(Math.pow(m - p, 2) + Math.pow(r - q, 2));
                s && 750 > c && 12 > t && (i || (d[0].addEventListener("click", f, !0), d[0].addEventListener("touchstart", g, !0), i = []), h = Date.now(), e(i, m, r), n && n.blur(), b.isDefined(k.disabled) && !1 !== k.disabled || j.triggerHandler("click", [a])),
                l()
            }),
            j.onclick = function(a) {},
            j.on("click",
            function(a, b) {
                c.$apply(function() {
                    r(c, {
                        $event: b || a
                    })
                })
            }),
            j.on("mousedown",
            function(a) {
                j.addClass(m)
            }),
            j.on("mousemove mouseup",
            function(a) {
                j.removeClass(m)
            })
        }
    }]),
    d("ngSwipeLeft", -1, "swipeleft"),
    d("ngSwipeRight", 1, "swiperight")
} (window, window.angular),
function(a, b, c) {
    "use strict";
    b.module("ngAnimate", ["ng"]).directive("ngAnimateChildren",
    function() {
        return function(a, c, d) {
            d = d.ngAnimateChildren,
            b.isString(d) && 0 === d.length ? c.data("$$ngAnimateChildren", !0) : a.$watch(d,
            function(a) {
                c.data("$$ngAnimateChildren", !!a)
            })
        }
    }).factory("$$animateReflow", ["$$rAF", "$document",
    function(a, b) {
        var c = b[0].body;
        return function(b) {
            return a(function() {
                b(c.offsetWidth)
            })
        }
    }]).config(["$provide", "$animateProvider",
    function(d, e) {
        function f(a) {
            for (var b = 0; b < a.length; b++) {
                var c = a[b];
                if (c.nodeType == k) return c
            }
        }
        function g(a) {
            return b.element(f(a))
        }
        var h = b.noop,
        i = b.forEach,
        j = e.$$selectors,
        k = 1,
        l = "$$ngAnimateState",
        m = "$$ngAnimateChildren",
        n = "ng-animate",
        o = {
            running: !0
        };
        d.decorator("$animate", ["$delegate", "$injector", "$sniffer", "$rootElement", "$$asyncCallback", "$rootScope", "$document",
        function(a, c, d, k, p, q, r) {
            function s(a) {
                var b = a.data(l) || {};
                b.running = !0,
                a.data(l, b)
            }
            function t(a) {
                if (a) {
                    var b = [],
                    e = {};
                    a = a.substr(1).split("."),
                    (d.transitions || d.animations) && b.push(c.get(j[""]));
                    for (var f = 0; f < a.length; f++) {
                        var g = a[f],
                        h = j[g];
                        h && !e[g] && (b.push(c.get(h)), e[g] = !0)
                    }
                    return b
                }
            }
            function u(a, c, d) {
                function e(a, b) {
                    var c = a[b],
                    d = a["before" + b.charAt(0).toUpperCase() + b.substr(1)];
                    return c || d ? ("leave" == b && (d = c, c = null), u.push({
                        event: b,
                        fn: c
                    }), q.push({
                        event: b,
                        fn: d
                    }), !0) : void 0
                }
                function f(b, c, e) {
                    var f = [];
                    i(b,
                    function(a) {
                        a.fn && f.push(a)
                    });
                    var g = 0;
                    i(f,
                    function(b, i) {
                        var l = function() {
                            a: {
                                if (c) {
                                    if ((c[i] || h)(), ++g < f.length) break a;
                                    c = null
                                }
                                e()
                            }
                        };
                        switch (b.event) {
                        case "setClass":
                            c.push(b.fn(a, j, k, l));
                            break;
                        case "addClass":
                            c.push(b.fn(a, j || d, l));
                            break;
                        case "removeClass":
                            c.push(b.fn(a, k || d, l));
                            break;
                        default:
                            c.push(b.fn(a, l))
                        }
                    }),
                    c && 0 === c.length && e()
                }
                var g = a[0];
                if (g) {
                    var j, k, l = "setClass" == c,
                    m = l || "addClass" == c || "removeClass" == c;
                    b.isArray(d) && (j = d[0], k = d[1], d = j + " " + k);
                    var n = a.attr("class") + " " + d;
                    if (B(n)) {
                        var o = h,
                        p = [],
                        q = [],
                        r = h,
                        s = [],
                        u = [],
                        n = (" " + n).replace(/\s+/g, ".");
                        return i(t(n),
                        function(a) { ! e(a, c) && l && (e(a, "addClass"), e(a, "removeClass"))
                        }),
                        {
                            node: g,
                            event: c,
                            className: d,
                            isClassBased: m,
                            isSetClassOperation: l,
                            before: function(a) {
                                o = a,
                                f(q, p,
                                function() {
                                    o = h,
                                    a()
                                })
                            },
                            after: function(a) {
                                r = a,
                                f(u, s,
                                function() {
                                    r = h,
                                    a()
                                })
                            },
                            cancel: function() {
                                p && (i(p,
                                function(a) { (a || h)(!0)
                                }), o(!0)),
                                s && (i(s,
                                function(a) { (a || h)(!0)
                                }), r(!0))
                            }
                        }
                    }
                }
            }
            function v(a, c, d, e, f, g, h) {
                function j(b) {
                    var e = "$animate:" + b;
                    t && t[e] && 0 < t[e].length && p(function() {
                        d.triggerHandler(e, {
                            event: a,
                            className: c
                        })
                    })
                }
                function k() {
                    j("before")
                }
                function m() {
                    j("after")
                }
                function o() {
                    j("close"),
                    h && p(function() {
                        h()
                    })
                }
                function q() {
                    q.hasBeenRun || (q.hasBeenRun = !0, g())
                }
                function r() {
                    if (!r.hasBeenRun) {
                        r.hasBeenRun = !0;
                        var b = d.data(l);
                        b && (s && s.isClassBased ? x(d, c) : (p(function() {
                            var b = d.data(l) || {};
                            D == b.index && x(d, c, a)
                        }), d.data(l, b))),
                        o()
                    }
                }
                var s = u(d, a, c);
                if (s) {
                    c = s.className;
                    var t = b.element._data(s.node),
                    t = t && t.events;
                    e || (e = f ? f.parent() : d.parent());
                    var v = d.data(l) || {};
                    f = v.active || {};
                    var w, A = v.totalActive || 0,
                    B = v.last;
                    if (s.isClassBased && (w = v.running || v.disabled || B && !B.isClassBased), w || y(d, e)) q(),
                    k(),
                    m(),
                    r();
                    else {
                        if (e = !1, A > 0) {
                            if (w = [], s.isClassBased)"setClass" == B.event ? (w.push(B), x(d, c)) : f[c] && (C = f[c], C.event == a ? e = !0 : (w.push(C), x(d, c)));
                            else if ("leave" == a && f["ng-leave"]) e = !0;
                            else {
                                for (var C in f) w.push(f[C]),
                                x(d, C);
                                f = {},
                                A = 0
                            }
                            0 < w.length && i(w,
                            function(a) {
                                a.cancel()
                            })
                        }
                        if (!s.isClassBased || s.isSetClassOperation || e || (e = "addClass" == a == d.hasClass(c)), e) q(),
                        k(),
                        m(),
                        o();
                        else {
                            "leave" == a && d.one("$destroy",
                            function(a) {
                                a = b.element(this);
                                var c = a.data(l);
                                c && (c = c.active["ng-leave"]) && (c.cancel(), x(a, "ng-leave"))
                            }),
                            d.addClass(n);
                            var D = z++;
                            A++,
                            f[c] = s,
                            d.data(l, {
                                last: s,
                                active: f,
                                index: D,
                                totalActive: A
                            }),
                            k(),
                            s.before(function(b) {
                                var e = d.data(l);
                                b = b || !e || !e.active[c] || s.isClassBased && e.active[c].event != a,
                                q(),
                                !0 === b ? r() : (m(), s.after(r))
                            })
                        }
                    }
                } else q(),
                k(),
                m(),
                r()
            }
            function w(a) { (a = f(a)) && (a = b.isFunction(a.getElementsByClassName) ? a.getElementsByClassName(n) : a.querySelectorAll("." + n), i(a,
                function(a) {
                    a = b.element(a),
                    (a = a.data(l)) && a.active && i(a.active,
                    function(a) {
                        a.cancel()
                    })
                }))
            }
            function x(a, b) {
                if (f(a) == f(k)) o.disabled || (o.running = !1, o.structural = !1);
                else if (b) {
                    var c = a.data(l) || {},
                    d = !0 === b; ! d && c.active && c.active[b] && (c.totalActive--, delete c.active[b]),
                    (d || !c.totalActive) && (a.removeClass(n), a.removeData(l))
                }
            }
            function y(a, c) {
                if (o.disabled) return ! 0;
                if (f(a) == f(k)) return o.running;
                var d, e, g;
                do {
                    if (0 === c.length) break;
                    var h = f(c) == f(k), i = h ? o: c.data(l) || {};
                    if (i.disabled) return ! 0;
                    h && (g = !0), !1 !== d && (h = c.data(m), b.isDefined(h) && (d = h)), e = e || i.running || i.last && !i.last.isClassBased
                } while ( c = c . parent ());
                return ! g || !d && e
            }
            var z = 0;
            k.data(l, o),
            q.$$postDigest(function() {
                q.$$postDigest(function() {
                    o.running = !1
                })
            });
            var A = e.classNameFilter(),
            B = A ?
            function(a) {
                return A.test(a)
            }: function() {
                return ! 0
            };
            return {
                enter: function(c, d, e, f) {
                    c = b.element(c),
                    d = d && b.element(d),
                    e = e && b.element(e),
                    s(c),
                    a.enter(c, d, e),
                    q.$$postDigest(function() {
                        c = g(c),
                        v("enter", "ng-enter", c, d, e, h, f)
                    })
                },
                leave: function(c, d) {
                    c = b.element(c),
                    w(c),
                    s(c),
                    q.$$postDigest(function() {
                        v("leave", "ng-leave", g(c), null, null,
                        function() {
                            a.leave(c)
                        },
                        d)
                    })
                },
                move: function(c, d, e, f) {
                    c = b.element(c),
                    d = d && b.element(d),
                    e = e && b.element(e),
                    w(c),
                    s(c),
                    a.move(c, d, e),
                    q.$$postDigest(function() {
                        c = g(c),
                        v("move", "ng-move", c, d, e, h, f)
                    })
                },
                addClass: function(c, d, e) {
                    c = b.element(c),
                    c = g(c),
                    v("addClass", d, c, null, null,
                    function() {
                        a.addClass(c, d)
                    },
                    e)
                },
                removeClass: function(c, d, e) {
                    c = b.element(c),
                    c = g(c),
                    v("removeClass", d, c, null, null,
                    function() {
                        a.removeClass(c, d)
                    },
                    e)
                },
                setClass: function(c, d, e, f) {
                    c = b.element(c),
                    c = g(c),
                    v("setClass", [d, e], c, null, null,
                    function() {
                        a.setClass(c, d, e)
                    },
                    f)
                },
                enabled: function(a, b) {
                    switch (arguments.length) {
                    case 2:
                        if (a) x(b);
                        else {
                            var c = b.data(l) || {};
                            c.disabled = !0,
                            b.data(l, c)
                        }
                        break;
                    case 1:
                        o.disabled = !a;
                        break;
                    default:
                        a = !o.disabled
                    }
                    return !! a
                }
            }
        }]),
        e.register("", ["$window", "$sniffer", "$timeout", "$$animateReflow",
        function(d, e, g, j) {
            function l() {
                I || (I = j(function() {
                    V = [],
                    I = null,
                    T = {}
                }))
            }
            function m(a, b) {
                I && I(),
                V.push(b),
                I = j(function() {
                    i(V,
                    function(a) {
                        a()
                    }),
                    V = [],
                    I = null,
                    T = {}
                })
            }
            function n(a, c) {
                var d = f(a);
                a = b.element(d),
                Y.push(a),
                d = Date.now() + c,
                X >= d || (g.cancel(W), X = d, W = g(function() {
                    o(Y),
                    Y = []
                },
                c, !1))
            }
            function o(a) {
                i(a,
                function(a) { (a = a.data(O)) && (a.closeAnimationFn || h)()
                })
            }
            function p(a, b) {
                var c = b ? T[b] : null;
                if (!c) {
                    var e, f, g, h, j = 0,
                    l = 0,
                    m = 0,
                    n = 0;
                    i(a,
                    function(a) {
                        if (a.nodeType == k) {
                            a = d.getComputedStyle(a) || {},
                            g = a[D + J],
                            j = Math.max(q(g), j),
                            h = a[D + K],
                            e = a[D + L],
                            l = Math.max(q(e), l),
                            f = a[F + L],
                            n = Math.max(q(f), n);
                            var b = q(a[F + J]);
                            b > 0 && (b *= parseInt(a[F + M], 10) || 1),
                            m = Math.max(b, m)
                        }
                    }),
                    c = {
                        total: 0,
                        transitionPropertyStyle: h,
                        transitionDurationStyle: g,
                        transitionDelayStyle: e,
                        transitionDelay: l,
                        transitionDuration: j,
                        animationDelayStyle: f,
                        animationDelay: n,
                        animationDuration: m
                    },
                    b && (T[b] = c)
                }
                return c
            }
            function q(a) {
                var c = 0;
                return a = b.isString(a) ? a.split(/\s*,\s*/) : [],
                i(a,
                function(a) {
                    c = Math.max(parseFloat(a) || 0, c)
                }),
                c
            }
            function r(a) {
                var b = a.parent(),
                c = b.data(N);
                return c || (b.data(N, ++U), c = U),
                c + "-" + f(a).getAttribute("class")
            }
            function s(a, b, c, d) {
                var e = r(b),
                g = e + " " + c,
                i = T[g] ? ++T[g].total: 0,
                j = {};
                if (i > 0) {
                    var k = c + "-stagger",
                    j = e + " " + k; (e = !T[j]) && b.addClass(k),
                    j = p(b, j),
                    e && b.removeClass(k)
                }
                d = d ||
                function(a) {
                    return a()
                },
                b.addClass(c);
                var k = b.data(O) || {},
                l = d(function() {
                    return p(b, g)
                });
                return d = l.transitionDuration,
                e = l.animationDuration,
                0 === d && 0 === e ? (b.removeClass(c), !1) : (b.data(O, {
                    running: k.running || 0,
                    itemIndex: i,
                    stagger: j,
                    timings: l,
                    closeAnimationFn: h
                }), a = 0 < k.running || "setClass" == a, d > 0 && t(b, c, a), e > 0 && 0 < j.animationDelay && 0 === j.animationDuration && (f(b).style[F] = "none 0s"), !0)
            }
            function t(a, b, c) {
                "ng-enter" != b && "ng-move" != b && "ng-leave" != b && c ? a.addClass(P) : f(a).style[D + K] = "none"
            }
            function u(a, b) {
                var c = D + K,
                d = f(a);
                d.style[c] && 0 < d.style[c].length && (d.style[c] = ""),
                a.removeClass(P)
            }
            function v(a) {
                var b = F;
                a = f(a),
                a.style[b] && 0 < a.style[b].length && (a.style[b] = "")
            }
            function w(a, b, c, d) {
                function e(a) {
                    b.off(s, g),
                    b.removeClass(j),
                    B(b, c),
                    a = f(b);
                    for (var d in u) a.style.removeProperty(u[d])
                }
                function g(a) {
                    a.stopPropagation();
                    var b = a.originalEvent || a;
                    a = b.$manualTimeStamp || Date.now(),
                    b = parseFloat(b.elapsedTime.toFixed(Q)),
                    Math.max(a - r, 0) >= q && b >= o && d()
                }
                var h = f(b);
                if (a = b.data(O), -1 != h.getAttribute("class").indexOf(c) && a) {
                    var j = "";
                    i(c.split(" "),
                    function(a, b) {
                        j += (b > 0 ? " ": "") + a + "-active"
                    });
                    var k = a.stagger,
                    l = a.timings,
                    m = a.itemIndex,
                    o = Math.max(l.transitionDuration, l.animationDuration),
                    p = Math.max(l.transitionDelay, l.animationDelay),
                    q = p * S,
                    r = Date.now(),
                    s = G + " " + E,
                    t = "",
                    u = [];
                    if (0 < l.transitionDuration) {
                        var v = l.transitionPropertyStyle; - 1 == v.indexOf("all") && (t += H + "transition-property: " + v + ";", t += H + "transition-duration: " + l.transitionDurationStyle + ";", u.push(H + "transition-property"), u.push(H + "transition-duration"))
                    }
                    return m > 0 && (0 < k.transitionDelay && 0 === k.transitionDuration && (t += H + "transition-delay: " + x(l.transitionDelayStyle, k.transitionDelay, m) + "; ", u.push(H + "transition-delay")), 0 < k.animationDelay && 0 === k.animationDuration && (t += H + "animation-delay: " + x(l.animationDelayStyle, k.animationDelay, m) + "; ", u.push(H + "animation-delay"))),
                    0 < u.length && (l = h.getAttribute("style") || "", h.setAttribute("style", l + "; " + t)),
                    b.on(s, g),
                    b.addClass(j),
                    a.closeAnimationFn = function() {
                        e(),
                        d()
                    },
                    h = (m * (Math.max(k.animationDelay, k.transitionDelay) || 0) + (p + o) * R) * S,
                    a.running++,
                    n(b, h),
                    e
                }
                d()
            }
            function x(a, b, c) {
                var d = "";
                return i(a.split(","),
                function(a, e) {
                    d += (e > 0 ? ",": "") + (c * b + parseInt(a, 10)) + "s"
                }),
                d
            }
            function y(a, b, c, d) {
                return s(a, b, c, d) ?
                function(a) {
                    a && B(b, c)
                }: void 0
            }
            function z(a, b, c, d) {
                return b.data(O) ? w(a, b, c, d) : (B(b, c), void d())
            }
            function A(a, b, c, d) {
                var e = y(a, b, c);
                if (e) {
                    var f = e;
                    return m(b,
                    function() {
                        u(b, c),
                        v(b),
                        f = z(a, b, c, d)
                    }),
                    function(a) { (f || h)(a)
                    }
                }
                l(),
                d()
            }
            function B(a, b) {
                a.removeClass(b);
                var c = a.data(O);
                c && (c.running && c.running--, c.running && 0 !== c.running || a.removeData(O))
            }
            function C(a, c) {
                var d = "";
                return a = b.isArray(a) ? a: a.split(/\s+/),
                i(a,
                function(a, b) {
                    a && 0 < a.length && (d += (b > 0 ? " ": "") + a + c)
                }),
                d
            }
            var D, E, F, G, H = "";
            a.ontransitionend === c && a.onwebkittransitionend !== c ? (H = "-webkit-", D = "WebkitTransition", E = "webkitTransitionEnd transitionend") : (D = "transition", E = "transitionend"),
            a.onanimationend === c && a.onwebkitanimationend !== c ? (H = "-webkit-", F = "WebkitAnimation", G = "webkitAnimationEnd animationend") : (F = "animation", G = "animationend");
            var I, J = "Duration",
            K = "Property",
            L = "Delay",
            M = "IterationCount",
            N = "$$ngAnimateKey",
            O = "$$ngAnimateCSS3Data",
            P = "ng-animate-block-transitions",
            Q = 3,
            R = 1.5,
            S = 1e3,
            T = {},
            U = 0,
            V = [],
            W = null,
            X = 0,
            Y = [];
            return {
                enter: function(a, b) {
                    return A("enter", a, "ng-enter", b)
                },
                leave: function(a, b) {
                    return A("leave", a, "ng-leave", b)
                },
                move: function(a, b) {
                    return A("move", a, "ng-move", b)
                },
                beforeSetClass: function(a, b, c, d) {
                    var e = C(c, "-remove") + " " + C(b, "-add"),
                    f = y("setClass", a, e,
                    function(d) {
                        var e = a.attr("class");
                        return a.removeClass(c),
                        a.addClass(b),
                        d = d(),
                        a.attr("class", e),
                        d
                    });
                    return f ? (m(a,
                    function() {
                        u(a, e),
                        v(a),
                        d()
                    }), f) : (l(), void d())
                },
                beforeAddClass: function(a, b, c) {
                    var d = y("addClass", a, C(b, "-add"),
                    function(c) {
                        return a.addClass(b),
                        c = c(),
                        a.removeClass(b),
                        c
                    });
                    return d ? (m(a,
                    function() {
                        u(a, b),
                        v(a),
                        c()
                    }), d) : (l(), void c())
                },
                setClass: function(a, b, c, d) {
                    return c = C(c, "-remove"),
                    b = C(b, "-add"),
                    z("setClass", a, c + " " + b, d)
                },
                addClass: function(a, b, c) {
                    return z("addClass", a, C(b, "-add"), c)
                },
                beforeRemoveClass: function(a, b, c) {
                    var d = y("removeClass", a, C(b, "-remove"),
                    function(c) {
                        var d = a.attr("class");
                        return a.removeClass(b),
                        c = c(),
                        a.attr("class", d),
                        c
                    });
                    return d ? (m(a,
                    function() {
                        u(a, b),
                        v(a),
                        c()
                    }), d) : void c()
                },
                removeClass: function(a, b, c) {
                    return z("removeClass", a, C(b, "-remove"), c)
                }
            }
        }])
    }])
} (window, window.angular),
function(a, b, c) {
    "use strict";
    function d(a) {
        var c = [];
        return i(c, b.noop).chars(a),
        c.join("")
    }
    function e(a) {
        var b = {};
        a = a.split(",");
        var c;
        for (c = 0; c < a.length; c++) b[a[c]] = !0;
        return b
    }
    function f(a, c) {
        function d(a, d, f, h) {
            if (d = b.lowercase(d), w[d]) for (; s.last() && x[s.last()];) e("", s.last());
            v[d] && s.last() == d && e("", d),
            (h = u[d] || !!h) || s.push(d);
            var i = {};
            f.replace(m,
            function(a, b, c, d, e) {
                i[b] = g(c || d || e || "")
            }),
            c.start && c.start(d, i, h)
        }
        function e(a, d) {
            var e, f = 0;
            if (d = b.lowercase(d)) for (f = s.length - 1; f >= 0 && s[f] != d; f--);
            if (f >= 0) {
                for (e = s.length - 1; e >= f; e--) c.end && c.end(s[e]);
                s.length = f
            }
        }
        "string" != typeof a && (a = null === a || "undefined" == typeof a ? "": "" + a);
        var f, h, i, s = [],
        t = a;
        for (s.last = function() {
            return s[s.length - 1]
        }; a;) {
            if (i = "", h = !0, s.last() && y[s.last()] ? (a = a.replace(RegExp("(.*)<\\s*\\/\\s*" + s.last() + "[^>]*>", "i"),
            function(a, b) {
                return b = b.replace(p, "$1").replace(r, "$1"),
                c.chars && c.chars(g(b)),
                ""
            }), e("", s.last())) : (0 === a.indexOf("<!--") ? (f = a.indexOf("--", 4), f >= 0 && a.lastIndexOf("-->", f) === f && (c.comment && c.comment(a.substring(4, f)), a = a.substring(f + 3), h = !1)) : q.test(a) ? (f = a.match(q)) && (a = a.replace(f[0], ""), h = !1) : o.test(a) ? (f = a.match(l)) && (a = a.substring(f[0].length), f[0].replace(l, e), h = !1) : n.test(a) && ((f = a.match(k)) ? (f[4] && (a = a.substring(f[0].length), f[0].replace(k, d)), h = !1) : (i += "<", a = a.substring(1))), h && (f = a.indexOf("<"), i += 0 > f ? a: a.substring(0, f), a = 0 > f ? "": a.substring(f), c.chars && c.chars(g(i)))), a == t) throw j("badparse", a);
            t = a
        }
        e()
    }
    function g(a) {
        if (!a) return "";
        var b = D.exec(a);
        a = b[1];
        var c = b[3];
        return (b = b[2]) && (C.innerHTML = b.replace(/</g, "&lt;"), b = "textContent" in C ? C.textContent: C.innerText),
        a + b + c
    }
    function h(a) {
        return a.replace(/&/g, "&amp;").replace(s,
        function(a) {
            var b = a.charCodeAt(0);
            return a = a.charCodeAt(1),
            "&#" + (1024 * (b - 55296) + (a - 56320) + 65536) + ";"
        }).replace(t,
        function(a) {
            return "&#" + a.charCodeAt(0) + ";"
        }).replace(/</g, "&lt;").replace(/>/g, "&gt;")
    }
    function i(a, c) {
        var d = !1,
        e = b.bind(a, a.push);
        return {
            start: function(a, f, g) {
                a = b.lowercase(a),
                !d && y[a] && (d = a),
                d || !0 !== z[a] || (e("<"), e(a), b.forEach(f,
                function(d, f) {
                    var g = b.lowercase(f),
                    i = "img" === a && "src" === g || "background" === g; ! 0 !== B[g] || !0 === A[g] && !c(d, i) || (e(" "), e(f), e('="'), e(h(d)), e('"'))
                }), e(g ? "/>": ">"))
            },
            end: function(a) {
                a = b.lowercase(a),
                d || !0 !== z[a] || (e("</"), e(a), e(">")),
                a == d && (d = !1)
            },
            chars: function(a) {
                d || e(h(a))
            }
        }
    }
    var j = b.$$minErr("$sanitize"),
    k = /^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,
    l = /^<\/\s*([\w:-]+)[^>]*>/,
    m = /([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,
    n = /^</,
    o = /^<\//,
    p = /\x3c!--(.*?)--\x3e/g,
    q = /<!DOCTYPE([^>]*?)>/i,
    r = /<!\[CDATA\[(.*?)]]\x3e/g,
    s = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
    t = /([^\#-~| |!])/g,
    u = e("area,br,col,hr,img,wbr");
    a = e("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),
    c = e("rp,rt");
    var v = b.extend({},
    c, a),
    w = b.extend({},
    a, e("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")),
    x = b.extend({},
    c, e("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")),
    y = e("script,style"),
    z = b.extend({},
    u, w, x, v),
    A = e("background,cite,href,longdesc,src"),
    B = b.extend({},
    A, e("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,target,title,type,valign,value,vspace,width")),
    C = document.createElement("pre"),
    D = /^(\s*)([\s\S]*?)(\s*)$/;
    b.module("ngSanitize", []).provider("$sanitize",
    function() {
        this.$get = ["$$sanitizeUri",
        function(a) {
            return function(b) {
                var c = [];
                return f(b, i(c,
                function(b, c) {
                    return ! /^unsafe/.test(a(b, c))
                })),
                c.join("")
            }
        }]
    }),
    b.module("ngSanitize").filter("linky", ["$sanitize",
    function(a) {
        var c = /((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"]/,
        e = /^mailto:/;
        return function(f, g) {
            function h(a) {
                a && n.push(d(a))
            }
            function i(a, c) {
                n.push("<a "),
                b.isDefined(g) && (n.push('target="'), n.push(g), n.push('" ')),
                n.push('href="', a.replace('"', "&quot;"), '">'),
                h(c),
                n.push("</a>")
            }
            if (!f) return f;
            for (var j, k, l, m = f,
            n = []; j = m.match(c);) k = j[0],
            j[2] == j[3] && (k = "mailto:" + k),
            l = j.index,
            h(m.substr(0, l)),
            i(k, j[0].replace(e, "")),
            m = m.substring(l + j[0].length);
            return h(m),
            a(n.join(""))
        }
    }])
} (window, window.angular),
function(a, b, c) {
    "use strict";
    function d(a) {
        return null != a && "" !== a && "hasOwnProperty" !== a && h.test("." + a)
    }
    function e(a, b) {
        if (!d(b)) throw g("badmember", 'Dotted member path "@{0}" is invalid.', b);
        for (var e = b.split("."), f = 0, h = e.length; h > f && a !== c; f++) {
            var i = e[f];
            a = null !== a ? a[i] : c
        }
        return a
    }
    function f(a, c) {
        c = c || {},
        b.forEach(c,
        function(a, b) {
            delete c[b]
        });
        for (var d in a) ! a.hasOwnProperty(d) || "$" === d.charAt(0) && "$" === d.charAt(1) || (c[d] = a[d]);
        return c
    }
    var g = b.$$minErr("$resource"),
    h = /^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/;
    b.module("ngResource", ["ng"]).factory("$resource", ["$http", "$q",
    function(a, d) {
        function h(a) {
            return i(a, !0).replace(/%26/gi, "&").replace(/%3D/gi, "=").replace(/%2B/gi, "+")
        }
        function i(a, b) {
            return encodeURIComponent(a).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, b ? "%20": "+")
        }
        function j(a, b) {
            this.template = a,
            this.defaults = b || {},
            this.urlParams = {}
        }
        function k(h, i, r) {
            function s(a, b) {
                var c = {};
                return b = o({},
                i, b),
                n(b,
                function(b, d) {
                    q(b) && (b = b()),
                    c[d] = b && b.charAt && "@" == b.charAt(0) ? e(a, b.substr(1)) : b
                }),
                c
            }
            function t(a) {
                return a.resource
            }
            function u(a) {
                f(a || {},
                this)
            }
            var v = new j(h);
            return r = o({},
            l, r),
            n(r,
            function(e, h) {
                var i = /^(POST|PUT|PATCH)$/i.test(e.method);
                u[h] = function(h, j, k, l) {
                    var r, w, x, y = {};
                    switch (arguments.length) {
                    case 4:
                        x = l,
                        w = k;
                    case 3:
                    case 2:
                        if (!q(j)) {
                            y = h,
                            r = j,
                            w = k;
                            break
                        }
                        if (q(h)) {
                            w = h,
                            x = j;
                            break
                        }
                        w = j,
                        x = k;
                    case 1:
                        q(h) ? w = h: i ? r = h: y = h;
                        break;
                    case 0:
                        break;
                    default:
                        throw g("badargs", "Expected up to 4 arguments [params, data, success, error], got {0} arguments", arguments.length)
                    }
                    var z = this instanceof u,
                    A = z ? r: e.isArray ? [] : new u(r),
                    B = {},
                    C = e.interceptor && e.interceptor.response || t,
                    D = e.interceptor && e.interceptor.responseError || c;
                    n(e,
                    function(a, b) {
                        "params" != b && "isArray" != b && "interceptor" != b && (B[b] = p(a))
                    }),
                    i && (B.data = r),
                    v.setUrlParams(B, o({},
                    s(r, e.params || {}), y), e.url);
                    var E = a(B).then(function(a) {
                        var c = a.data,
                        d = A.$promise;
                        if (c) {
                            if (b.isArray(c) !== !!e.isArray) throw g("badcfg", "Error in resource configuration. Expected response to contain an {0} but got an {1}", e.isArray ? "array": "object", b.isArray(c) ? "array": "object");
                            e.isArray ? (A.length = 0, n(c,
                            function(a) {
                                "object" == typeof a ? A.push(new u(a)) : A.push(a)
                            })) : (f(c, A), A.$promise = d)
                        }
                        return A.$resolved = !0,
                        a.resource = A,
                        a
                    },
                    function(a) {
                        return A.$resolved = !0,
                        (x || m)(a),
                        d.reject(a)
                    });
                    return E = E.then(function(a) {
                        var b = C(a);
                        return (w || m)(b, a.headers),
                        b
                    },
                    D),
                    z ? E: (A.$promise = E, A.$resolved = !1, A)
                },
                u.prototype["$" + h] = function(a, b, c) {
                    q(a) && (c = b, b = a, a = {});
                    var d = u[h].call(this, a, this, b, c);
                    return d.$promise || d
                }
            }),
            u.bind = function(a) {
                return k(h, o({},
                i, a), r)
            },
            u
        }
        var l = {
            get: {
                method: "GET"
            },
            save: {
                method: "POST"
            },
            query: {
                method: "GET",
                isArray: !0
            },
            remove: {
                method: "DELETE"
            },
            "delete": {
                method: "DELETE"
            }
        },
        m = b.noop,
        n = b.forEach,
        o = b.extend,
        p = b.copy,
        q = b.isFunction;
        return j.prototype = {
            setUrlParams: function(a, c, d) {
                var e, f, i = this,
                j = d || i.template,
                k = i.urlParams = {};
                n(j.split(/\W/),
                function(a) {
                    if ("hasOwnProperty" === a) throw g("badname", "hasOwnProperty is not a valid parameter name."); ! new RegExp("^\\d+$").test(a) && a && new RegExp("(^|[^\\\\]):" + a + "(\\W|$)").test(j) && (k[a] = !0)
                }),
                j = j.replace(/\\:/g, ":"),
                c = c || {},
                n(i.urlParams,
                function(a, d) {
                    e = c.hasOwnProperty(d) ? c[d] : i.defaults[d],
                    b.isDefined(e) && null !== e ? (f = h(e), j = j.replace(new RegExp(":" + d + "(\\W|$)", "g"),
                    function(a, b) {
                        return f + b
                    })) : j = j.replace(new RegExp("(/?):" + d + "(\\W|$)", "g"),
                    function(a, b, c) {
                        return "/" == c.charAt(0) ? c: b + c
                    })
                }),
                j = j.replace(/\/+$/, "") || "/",
                j = j.replace(/\/\.(?=\w+($|\?))/, "."),
                a.url = j.replace(/\/\\\./, "/."),
                n(c,
                function(b, c) {
                    i.urlParams[c] || (a.params = a.params || {},
                    a.params[c] = b)
                })
            }
        },
        k
    }])
} (window, window.angular),
function(a, b, c) {
    "use strict";
    b.module("ngCookies", ["ng"]).factory("$cookies", ["$rootScope", "$browser",
    function(a, d) {
        function e() {
            var a, e, f, i;
            for (a in h) k(g[a]) && d.cookies(a, c);
            for (a in g) e = g[a],
            b.isString(e) || (e = "" + e, g[a] = e),
            e !== h[a] && (d.cookies(a, e), i = !0);
            if (i) {
                i = !1,
                f = d.cookies();
                for (a in g) g[a] !== f[a] && (k(f[a]) ? delete g[a] : g[a] = f[a], i = !0)
            }
        }
        var f, g = {},
        h = {},
        i = !1,
        j = b.copy,
        k = b.isUndefined;
        return d.addPollFn(function() {
            var b = d.cookies();
            f != b && (f = b, j(b, h), j(b, g), i && a.$apply())
        })(),
        i = !0,
        a.$watch(e),
        g
    }]).factory("$cookieStore", ["$cookies",
    function(a) {
        return {
            get: function(c) {
                var d = a[c];
                return d ? b.fromJson(d) : d
            },
            put: function(c, d) {
                a[c] = b.toJson(d)
            },
            remove: function(b) {
                delete a[b]
            }
        }
    }])
} (window, window.angular),
function() {
    angular.module("angularytics", []).provider("Angularytics",
    function() {
        var a = ["Google"];
        this.setEventHandlers = function(c) {
            angular.isString(c) && (c = [c]),
            a = [],
            angular.forEach(c,
            function(c) {
                a.push(b(c))
            })
        };
        var b = function(a) {
            return a.charAt(0).toUpperCase() + a.substring(1)
        },
        c = "$locationChangeSuccess";
        this.setPageChangeEvent = function(a) {
            c = a
        },
        this.$get = ["$injector", "$rootScope", "$location",
        function(b, d, e) {
            var f = [];
            angular.forEach(a,
            function(a) {
                f.push(b.get("Angularytics" + a + "Handler"))
            });
            var g = function(a) {
                angular.forEach(f,
                function(b) {
                    a(b)
                })
            },
            h = {};
            return h.init = function() {},
            h.trackEvent = function(a, b, c, d, e) {
                g(function(f) {
                    a && b && f.trackEvent(a, b, c, d, e)
                })
            },
            h.trackPageView = function(a) {
                g(function(b) {
                    a && b.trackPageView(a)
                })
            },
            d.$on(c,
            function() {
                h.trackPageView(e.path())
            }),
            h
        }]
    })
} (),
function() {
    angular.module("angularytics").factory("AngularyticsConsoleHandler", ["$log",
    function(a) {
        var b = {};
        return b.trackPageView = function(b) {
            a.log("URL visited", b)
        },
        b.trackEvent = function(b, c, d, e, f) {
            a.log("Event tracked", b, c, d, e, f)
        },
        b
    }])
} (),
function() {
    angular.module("angularytics").factory("AngularyticsGoogleHandler", ["$log",
    function(a) {
        var b = {};
        return b.trackPageView = function(a) {
            _gaq.push(["_set", "page", a]),
            _gaq.push(["_trackPageview", a])
        },
        b.trackEvent = function(a, b, c, d, e) {
            _gaq.push(["_trackEvent", a, b, c, d, e])
        },
        b
    }]).factory("AngularyticsGoogleUniversalHandler",
    function() {
        var a = {};
        return a.trackPageView = function(a) {
            ga("set", "page", a),
            ga("send", "pageview", a)
        },
        a.trackEvent = function(a, b, c, d, e) {
            ga("send", "event", a, b, c, d, {
                nonInteraction: e
            })
        },
        a
    })
} (),
function() {
    angular.module("angularytics").filter("trackEvent", ["Angularytics",
    function(a) {
        return function(b, c, d, e, f, g) {
            return a.trackEvent(c, d, e, f, g),
            b
        }
    }])
} (),
function(a, b) {
    "function" == typeof define && define.amd ? define(b) : "object" == typeof exports ? module.exports = b() : a.NProgress = b()
} (this,
function() {
    function a(a, b, c) {
        return b > a ? b: a > c ? c: a
    }
    function b(a) {
        return 100 * ( - 1 + a)
    }
    function c(a, c, d) {
        var e;
        return e = "translate3d" === j.positionUsing ? {
            transform: "translate3d(" + b(a) + "%,0,0)"
        }: "translate" === j.positionUsing ? {
            transform: "translate(" + b(a) + "%,0)"
        }: {
            "margin-left": b(a) + "%"
        },
        e.transition = "all " + c + "ms " + d,
        e
    }
    function d(a, b) {
        var c = "string" == typeof a ? a: g(a);
        return c.indexOf(" " + b + " ") >= 0
    }
    function e(a, b) {
        var c = g(a),
        e = c + b;
        d(c, b) || (a.className = e.substring(1))
    }
    function f(a, b) {
        var c, e = g(a);
        d(a, b) && (c = e.replace(" " + b + " ", " "), a.className = c.substring(1, c.length - 1))
    }
    function g(a) {
        return (" " + (a.className || "") + " ").replace(/\s+/gi, " ")
    }
    function h(a) {
        a && a.parentNode && a.parentNode.removeChild(a)
    }
    var i = {};
    i.version = "0.1.6";
    var j = i.settings = {
        minimum: .08,
        easing: "ease",
        positionUsing: "",
        speed: 200,
        trickle: !0,
        trickleRate: .02,
        trickleSpeed: 800,
        showSpinner: !0,
        barSelector: '[role="bar"]',
        spinnerSelector: '[role="spinner"]',
        parent: "body",
        template: '<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'
    };
    i.configure = function(a) {
        var b, c;
        for (b in a) c = a[b],
        void 0 !== c && a.hasOwnProperty(b) && (j[b] = c);
        return this
    },
    i.status = null,
    i.set = function(b) {
        var d = i.isStarted();
        b = a(b, j.minimum, 1),
        i.status = 1 === b ? null: b;
        var e = i.render(!d),
        f = e.querySelector(j.barSelector),
        g = j.speed,
        h = j.easing;
        return e.offsetWidth,
        k(function(a) {
            "" === j.positionUsing && (j.positionUsing = i.getPositioningCSS()),
            l(f, c(b, g, h)),
            1 === b ? (l(e, {
                transition: "none",
                opacity: 1
            }), e.offsetWidth, setTimeout(function() {
                l(e, {
                    transition: "all " + g + "ms linear",
                    opacity: 0
                }),
                setTimeout(function() {
                    i.remove(),
                    a()
                },
                g)
            },
            g)) : setTimeout(a, g)
        }),
        this
    },
    i.isStarted = function() {
        return "number" == typeof i.status
    },
    i.start = function() {
        i.status || i.set(0);
        var a = function() {
            setTimeout(function() {
                i.status && (i.trickle(), a())
            },
            j.trickleSpeed)
        };
        return j.trickle && a(),
        this
    },
    i.done = function(a) {
        return a || i.status ? i.inc(.3 + .5 * Math.random()).set(1) : this
    },
    i.inc = function(b) {
        var c = i.status;
        return c ? ("number" != typeof b && (b = (1 - c) * a(Math.random() * c, .1, .95)), c = a(c + b, 0, .994), i.set(c)) : i.start()
    },
    i.trickle = function() {
        return i.inc(Math.random() * j.trickleRate)
    },
    function() {
        var a = 0,
        b = 0;
        i.promise = function(c) {
            return c && "resolved" != c.state() ? (0 == b && i.start(), a++, b++, c.always(function() {
                b--,
                0 == b ? (a = 0, i.done()) : i.set((a - b) / a)
            }), this) : this
        }
    } (),
    i.render = function(a) {
        if (i.isRendered()) return document.getElementById("nprogress");
        e(document.documentElement, "nprogress-busy");
        var c = document.createElement("div");
        c.id = "nprogress",
        c.innerHTML = j.template;
        var d, f = c.querySelector(j.barSelector),
        g = a ? "-100": b(i.status || 0),
        k = document.querySelector(j.parent);
        return l(f, {
            transition: "all 0 linear",
            transform: "translate3d(" + g + "%,0,0)"
        }),
        j.showSpinner || (d = c.querySelector(j.spinnerSelector), d && h(d)),
        k != document.body && e(k, "nprogress-custom-parent"),
        k.appendChild(c),
        c
    },
    i.remove = function() {
        f(document.documentElement, "nprogress-busy"),
        f(document.querySelector(j.parent), "nprogress-custom-parent");
        var a = document.getElementById("nprogress");
        a && h(a)
    },
    i.isRendered = function() {
        return !! document.getElementById("nprogress")
    },
    i.getPositioningCSS = function() {
        var a = document.body.style,
        b = "WebkitTransform" in a ? "Webkit": "MozTransform" in a ? "Moz": "msTransform" in a ? "ms": "OTransform" in a ? "O": "";
        return b + "Perspective" in a ? "translate3d": b + "Transform" in a ? "translate": "margin"
    };
    var k = function() {
        function a() {
            var c = b.shift();
            c && c(a)
        }
        var b = [];
        return function(c) {
            b.push(c),
            1 == b.length && a()
        }
    } (),
    l = function() {
        function a(a) {
            return a.replace(/^-ms-/, "ms-").replace(/-([\da-z])/gi,
            function(a, b) {
                return b.toUpperCase()
            })
        }
        function b(a) {
            var b = document.body.style;
            if (a in b) return a;
            for (var c, d = e.length,
            f = a.charAt(0).toUpperCase() + a.slice(1); d--;) if (c = e[d] + f, c in b) return c;
            return a
        }
        function c(c) {
            return c = a(c),
            f[c] || (f[c] = b(c))
        }
        function d(a, b, d) {
            b = c(b),
            a.style[b] = d
        }
        var e = ["Webkit", "O", "Moz", "ms"],
        f = {};
        return function(a, b) {
            var c, e, f = arguments;
            if (2 == f.length) for (c in b) e = b[c],
            void 0 !== e && b.hasOwnProperty(c) && d(a, c, e);
            else d(a, f[1], f[2])
        }
    } ();
    return i
}),
function(a) {
    function b(a, b) {
        return function(c) {
            return i(a.call(this, c), b)
        }
    }
    function c(a) {
        return function(b) {
            return this.lang().ordinal(a.call(this, b))
        }
    }
    function d() {}
    function e(a) {
        g(this, a)
    }
    function f(a) {
        var b = this._data = {},
        c = a.years || a.year || a.y || 0,
        d = a.months || a.month || a.M || 0,
        e = a.weeks || a.week || a.w || 0,
        f = a.days || a.day || a.d || 0,
        g = a.hours || a.hour || a.h || 0,
        i = a.minutes || a.minute || a.m || 0,
        j = a.seconds || a.second || a.s || 0,
        k = a.milliseconds || a.millisecond || a.ms || 0;
        this._milliseconds = k + 1e3 * j + 6e4 * i + 36e5 * g,
        this._days = f + 7 * e,
        this._months = d + 12 * c,
        b.milliseconds = k % 1e3,
        j += h(k / 1e3),
        b.seconds = j % 60,
        i += h(j / 60),
        b.minutes = i % 60,
        g += h(i / 60),
        b.hours = g % 24,
        f += h(g / 24),
        f += 7 * e,
        b.days = f % 30,
        d += h(f / 30),
        b.months = d % 12,
        c += h(d / 12),
        b.years = c
    }
    function g(a, b) {
        for (var c in b) b.hasOwnProperty(c) && (a[c] = b[c]);
        return a
    }
    function h(a) {
        return 0 > a ? Math.ceil(a) : Math.floor(a)
    }
    function i(a, b) {
        for (var c = a + ""; c.length < b;) c = "0" + c;
        return c
    }
    function j(a, b, c) {
        var d, e = b._milliseconds,
        f = b._days,
        g = b._months;
        e && a._d.setTime( + a + e * c),
        f && a.date(a.date() + f * c),
        g && (d = a.date(), a.date(1).month(a.month() + g * c).date(Math.min(d, a.daysInMonth())))
    }
    function k(a) {
        return "[object Array]" === Object.prototype.toString.call(a)
    }
    function l(a, b) {
        var c, d = Math.min(a.length, b.length),
        e = Math.abs(a.length - b.length),
        f = 0;
        for (c = 0; d > c; c++)~~a[c] !== ~~b[c] && f++;
        return f + e
    }
    function m(a, b) {
        return b.abbr = a,
        J[a] || (J[a] = new d),
        J[a].set(b),
        J[a]
    }
    function n(a) {
        return a ? (!J[a] && K && require("./lang/" + a), J[a]) : F.fn._lang
    }
    function o(a) {
        return a.match(/\[.*\]/) ? a.replace(/^\[|\]$/g, "") : a.replace(/\\/g, "")
    }
    function p(a) {
        var b, c, d = a.match(M);
        for (b = 0, c = d.length; c > b; b++) ea[d[b]] ? d[b] = ea[d[b]] : d[b] = o(d[b]);
        return function(e) {
            var f = "";
            for (b = 0; c > b; b++) f += "function" == typeof d[b].call ? d[b].call(e, a) : d[b];
            return f
        }
    }
    function q(a, b) {
        function c(b) {
            return a.lang().longDateFormat(b) || b
        }
        for (var d = 5; d--&&N.test(b);) b = b.replace(N, c);
        return ba[b] || (ba[b] = p(b)),
        ba[b](a)
    }
    function r(a) {
        switch (a) {
        case "DDDD":
            return Q;
        case "YYYY":
            return R;
        case "YYYYY":
            return S;
        case "S":
        case "SS":
        case "SSS":
        case "DDD":
            return P;
        case "MMM":
        case "MMMM":
        case "dd":
        case "ddd":
        case "dddd":
        case "a":
        case "A":
            return T;
        case "X":
            return W;
        case "Z":
        case "ZZ":
            return U;
        case "T":
            return V;
        case "MM":
        case "DD":
        case "YY":
        case "HH":
        case "hh":
        case "mm":
        case "ss":
        case "M":
        case "D":
        case "d":
        case "H":
        case "h":
        case "m":
        case "s":
            return O;
        default:
            return new RegExp(a.replace("\\", ""));
        }
    }
    function s(a, b, c) {
        var d, e = c._a;
        switch (a) {
        case "M":
        case "MM":
            e[1] = null == b ? 0 : ~~b - 1;
            break;
        case "MMM":
        case "MMMM":
            d = n(c._l).monthsParse(b),
            null != d ? e[1] = d: c._isValid = !1;
            break;
        case "D":
        case "DD":
        case "DDD":
        case "DDDD":
            null != b && (e[2] = ~~b);
            break;
        case "YY":
            e[0] = ~~b + (~~b > 68 ? 1900 : 2e3);
            break;
        case "YYYY":
        case "YYYYY":
            e[0] = ~~b;
            break;
        case "a":
        case "A":
            c._isPm = "pm" === (b + "").toLowerCase();
            break;
        case "H":
        case "HH":
        case "h":
        case "hh":
            e[3] = ~~b;
            break;
        case "m":
        case "mm":
            e[4] = ~~b;
            break;
        case "s":
        case "ss":
            e[5] = ~~b;
            break;
        case "S":
        case "SS":
        case "SSS":
            e[6] = ~~ (1e3 * ("0." + b));
            break;
        case "X":
            c._d = new Date(1e3 * parseFloat(b));
            break;
        case "Z":
        case "ZZ":
            c._useUTC = !0,
            d = (b + "").match($),
            d && d[1] && (c._tzh = ~~d[1]),
            d && d[2] && (c._tzm = ~~d[2]),
            d && "+" === d[0] && (c._tzh = -c._tzh, c._tzm = -c._tzm)
        }
        null == b && (c._isValid = !1)
    }
    function t(a) {
        var b, c, d = [];
        if (!a._d) {
            for (b = 0; 7 > b; b++) a._a[b] = d[b] = null == a._a[b] ? 2 === b ? 1 : 0 : a._a[b];
            d[3] += a._tzh || 0,
            d[4] += a._tzm || 0,
            c = new Date(0),
            a._useUTC ? (c.setUTCFullYear(d[0], d[1], d[2]), c.setUTCHours(d[3], d[4], d[5], d[6])) : (c.setFullYear(d[0], d[1], d[2]), c.setHours(d[3], d[4], d[5], d[6])),
            a._d = c
        }
    }
    function u(a) {
        var b, c, d = a._f.match(M),
        e = a._i;
        for (a._a = [], b = 0; b < d.length; b++) c = (r(d[b]).exec(e) || [])[0],
        c && (e = e.slice(e.indexOf(c) + c.length)),
        ea[d[b]] && s(d[b], c, a);
        a._isPm && a._a[3] < 12 && (a._a[3] += 12),
        a._isPm === !1 && 12 === a._a[3] && (a._a[3] = 0),
        t(a)
    }
    function v(a) {
        for (var b, c, d, f, h = 99; a._f.length;) {
            if (b = g({},
            a), b._f = a._f.pop(), u(b), c = new e(b), c.isValid()) {
                d = c;
                break
            }
            f = l(b._a, c.toArray()),
            h > f && (h = f, d = c)
        }
        g(a, d)
    }
    function w(a) {
        var b, c = a._i;
        if (X.exec(c)) {
            for (a._f = "YYYY-MM-DDT", b = 0; 4 > b; b++) if (Z[b][1].exec(c)) {
                a._f += Z[b][0];
                break
            }
            U.exec(c) && (a._f += " Z"),
            u(a)
        } else a._d = new Date(c)
    }
    function x(b) {
        var c = b._i,
        d = L.exec(c);
        c === a ? b._d = new Date: d ? b._d = new Date( + d[1]) : "string" == typeof c ? w(b) : k(c) ? (b._a = c.slice(0), t(b)) : b._d = c instanceof Date ? new Date( + c) : new Date(c)
    }
    function y(a, b, c, d, e) {
        return e.relativeTime(b || 1, !!c, a, d)
    }
    function z(a, b, c) {
        var d = I(Math.abs(a) / 1e3),
        e = I(d / 60),
        f = I(e / 60),
        g = I(f / 24),
        h = I(g / 365),
        i = 45 > d && ["s", d] || 1 === e && ["m"] || 45 > e && ["mm", e] || 1 === f && ["h"] || 22 > f && ["hh", f] || 1 === g && ["d"] || 25 >= g && ["dd", g] || 45 >= g && ["M"] || 345 > g && ["MM", I(g / 30)] || 1 === h && ["y"] || ["yy", h];
        return i[2] = b,
        i[3] = a > 0,
        i[4] = c,
        y.apply({},
        i)
    }
    function A(a, b, c) {
        var d = c - b,
        e = c - a.day();
        return e > d && (e -= 7),
        d - 7 > e && (e += 7),
        Math.ceil(F(a).add("d", e).dayOfYear() / 7)
    }
    function B(a) {
        var b = a._i,
        c = a._f;
        return null === b || "" === b ? null: ("string" == typeof b && (a._i = b = n().preparse(b)), F.isMoment(b) ? (a = g({},
        b), a._d = new Date( + b._d)) : c ? k(c) ? v(a) : u(a) : x(a), new e(a))
    }
    function C(a, b) {
        F.fn[a] = F.fn[a + "s"] = function(a) {
            var c = this._isUTC ? "UTC": "";
            return null != a ? (this._d["set" + c + b](a), this) : this._d["get" + c + b]()
        }
    }
    function D(a) {
        F.duration.fn[a] = function() {
            return this._data[a]
        }
    }
    function E(a, b) {
        F.duration.fn["as" + a] = function() {
            return + this / b
        }
    }
    for (var F, G, H = "2.0.0",
    I = Math.round,
    J = {},
    K = "undefined" != typeof module && module.exports,
    L = /^\/?Date\((\-?\d+)/i,
    M = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g,
    N = /(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,
    O = /\d\d?/,
    P = /\d{1,3}/,
    Q = /\d{3}/,
    R = /\d{1,4}/,
    S = /[+\-]?\d{1,6}/,
    T = /[0-9]*[a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF]+\s*?[\u0600-\u06FF]+/i,
    U = /Z|[\+\-]\d\d:?\d\d/i,
    V = /T/i,
    W = /[\+\-]?\d+(\.\d{1,3})?/,
    X = /^\s*\d{4}-\d\d-\d\d((T| )(\d\d(:\d\d(:\d\d(\.\d\d?\d?)?)?)?)?([\+\-]\d\d:?\d\d)?)?/,
    Y = "YYYY-MM-DDTHH:mm:ssZ",
    Z = [["HH:mm:ss.S", /(T| )\d\d:\d\d:\d\d\.\d{1,3}/], ["HH:mm:ss", /(T| )\d\d:\d\d:\d\d/], ["HH:mm", /(T| )\d\d:\d\d/], ["HH", /(T| )\d\d/]], $ = /([\+\-]|\d\d)/gi, _ = "Month|Date|Hours|Minutes|Seconds|Milliseconds".split("|"), aa = {
        Milliseconds: 1,
        Seconds: 1e3,
        Minutes: 6e4,
        Hours: 36e5,
        Days: 864e5,
        Months: 2592e6,
        Years: 31536e6
    },
    ba = {},
    ca = "DDD w W M D d".split(" "), da = "M D H h m s w W".split(" "), ea = {
        M: function() {
            return this.month() + 1
        },
        MMM: function(a) {
            return this.lang().monthsShort(this, a)
        },
        MMMM: function(a) {
            return this.lang().months(this, a)
        },
        D: function() {
            return this.date()
        },
        DDD: function() {
            return this.dayOfYear()
        },
        d: function() {
            return this.day()
        },
        dd: function(a) {
            return this.lang().weekdaysMin(this, a)
        },
        ddd: function(a) {
            return this.lang().weekdaysShort(this, a)
        },
        dddd: function(a) {
            return this.lang().weekdays(this, a)
        },
        w: function() {
            return this.week()
        },
        W: function() {
            return this.isoWeek()
        },
        YY: function() {
            return i(this.year() % 100, 2)
        },
        YYYY: function() {
            return i(this.year(), 4)
        },
        YYYYY: function() {
            return i(this.year(), 5)
        },
        a: function() {
            return this.lang().meridiem(this.hours(), this.minutes(), !0)
        },
        A: function() {
            return this.lang().meridiem(this.hours(), this.minutes(), !1)
        },
        H: function() {
            return this.hours()
        },
        h: function() {
            return this.hours() % 12 || 12
        },
        m: function() {
            return this.minutes()
        },
        s: function() {
            return this.seconds()
        },
        S: function() {
            return~~ (this.milliseconds() / 100)
        },
        SS: function() {
            return i(~~ (this.milliseconds() / 10), 2)
        },
        SSS: function() {
            return i(this.milliseconds(), 3)
        },
        Z: function() {
            var a = -this.zone(),
            b = "+";
            return 0 > a && (a = -a, b = "-"),
            b + i(~~ (a / 60), 2) + ":" + i(~~a % 60, 2)
        },
        ZZ: function() {
            var a = -this.zone(),
            b = "+";
            return 0 > a && (a = -a, b = "-"),
            b + i(~~ (10 * a / 6), 4)
        },
        X: function() {
            return this.unix()
        }
    }; ca.length;) G = ca.pop(),
    ea[G + "o"] = c(ea[G]);
    for (; da.length;) G = da.pop(),
    ea[G + G] = b(ea[G], 2);
    for (ea.DDDD = b(ea.DDD, 3), d.prototype = {
        set: function(a) {
            var b, c;
            for (c in a) b = a[c],
            "function" == typeof b ? this[c] = b: this["_" + c] = b
        },
        _months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
        months: function(a) {
            return this._months[a.month()]
        },
        _monthsShort: "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
        monthsShort: function(a) {
            return this._monthsShort[a.month()]
        },
        monthsParse: function(a) {
            var b, c, d;
            for (this._monthsParse || (this._monthsParse = []), b = 0; 12 > b; b++) if (this._monthsParse[b] || (c = F([2e3, b]), d = "^" + this.months(c, "") + "|^" + this.monthsShort(c, ""), this._monthsParse[b] = new RegExp(d.replace(".", ""), "i")), this._monthsParse[b].test(a)) return b
        },
        _weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
        weekdays: function(a) {
            return this._weekdays[a.day()]
        },
        _weekdaysShort: "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
        weekdaysShort: function(a) {
            return this._weekdaysShort[a.day()]
        },
        _weekdaysMin: "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
        weekdaysMin: function(a) {
            return this._weekdaysMin[a.day()]
        },
        _longDateFormat: {
            LT: "h:mm A",
            L: "MM/DD/YYYY",
            LL: "MMMM D YYYY",
            LLL: "MMMM D YYYY LT",
            LLLL: "dddd, MMMM D YYYY LT"
        },
        longDateFormat: function(a) {
            var b = this._longDateFormat[a];
            return ! b && this._longDateFormat[a.toUpperCase()] && (b = this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,
            function(a) {
                return a.slice(1)
            }), this._longDateFormat[a] = b),
            b
        },
        meridiem: function(a, b, c) {
            return a > 11 ? c ? "pm": "PM": c ? "am": "AM"
        },
        _calendar: {
            sameDay: "[Today at] LT",
            nextDay: "[Tomorrow at] LT",
            nextWeek: "dddd [at] LT",
            lastDay: "[Yesterday at] LT",
            lastWeek: "[last] dddd [at] LT",
            sameElse: "L"
        },
        calendar: function(a, b) {
            var c = this._calendar[a];
            return "function" == typeof c ? c.apply(b) : c
        },
        _relativeTime: {
            future: "in %s",
            past: "%s ago",
            s: "a few seconds",
            m: "a minute",
            mm: "%d minutes",
            h: "an hour",
            hh: "%d hours",
            d: "a day",
            dd: "%d days",
            M: "a month",
            MM: "%d months",
            y: "a year",
            yy: "%d years"
        },
        relativeTime: function(a, b, c, d) {
            var e = this._relativeTime[c];
            return "function" == typeof e ? e(a, b, c, d) : e.replace(/%d/i, a)
        },
        pastFuture: function(a, b) {
            var c = this._relativeTime[a > 0 ? "future": "past"];
            return "function" == typeof c ? c(b) : c.replace(/%s/i, b)
        },
        ordinal: function(a) {
            return this._ordinal.replace("%d", a)
        },
        _ordinal: "%d",
        preparse: function(a) {
            return a
        },
        postformat: function(a) {
            return a
        },
        week: function(a) {
            return A(a, this._week.dow, this._week.doy)
        },
        _week: {
            dow: 0,
            doy: 6
        }
    },
    F = function(a, b, c) {
        return B({
            _i: a,
            _f: b,
            _l: c,
            _isUTC: !1
        })
    },
    F.utc = function(a, b, c) {
        return B({
            _useUTC: !0,
            _isUTC: !0,
            _l: c,
            _i: a,
            _f: b
        })
    },
    F.unix = function(a) {
        return F(1e3 * a)
    },
    F.duration = function(a, b) {
        var c, d = F.isDuration(a),
        e = "number" == typeof a,
        g = d ? a._data: e ? {}: a;
        return e && (b ? g[b] = a: g.milliseconds = a),
        c = new f(g),
        d && a.hasOwnProperty("_lang") && (c._lang = a._lang),
        c
    },
    F.version = H, F.defaultFormat = Y, F.lang = function(a, b) {
        return a ? (b ? m(a, b) : J[a] || n(a), void(F.duration.fn._lang = F.fn._lang = n(a))) : F.fn._lang._abbr
    },
    F.langData = function(a) {
        return a && a._lang && a._lang._abbr && (a = a._lang._abbr),
        n(a)
    },
    F.isMoment = function(a) {
        return a instanceof e
    },
    F.isDuration = function(a) {
        return a instanceof f
    },
    F.fn = e.prototype = {
        clone: function() {
            return F(this)
        },
        valueOf: function() {
            return + this._d
        },
        unix: function() {
            return Math.floor( + this._d / 1e3)
        },
        toString: function() {
            return this.format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")
        },
        toDate: function() {
            return this._d
        },
        toJSON: function() {
            return F.utc(this).format("YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")
        },
        toArray: function() {
            var a = this;
            return [a.year(), a.month(), a.date(), a.hours(), a.minutes(), a.seconds(), a.milliseconds()]
        },
        isValid: function() {
            return null == this._isValid && (this._a ? this._isValid = !l(this._a, (this._isUTC ? F.utc(this._a) : F(this._a)).toArray()) : this._isValid = !isNaN(this._d.getTime())),
            !!this._isValid
        },
        utc: function() {
            return this._isUTC = !0,
            this
        },
        local: function() {
            return this._isUTC = !1,
            this
        },
        format: function(a) {
            var b = q(this, a || F.defaultFormat);
            return this.lang().postformat(b)
        },
        add: function(a, b) {
            var c;
            return c = "string" == typeof a ? F.duration( + b, a) : F.duration(a, b),
            j(this, c, 1),
            this
        },
        subtract: function(a, b) {
            var c;
            return c = "string" == typeof a ? F.duration( + b, a) : F.duration(a, b),
            j(this, c, -1),
            this
        },
        diff: function(a, b, c) {
            var d, e, f = this._isUTC ? F(a).utc() : F(a).local(),
            g = 6e4 * (this.zone() - f.zone());
            return b && (b = b.replace(/s$/, "")),
            "year" === b || "month" === b ? (d = 432e5 * (this.daysInMonth() + f.daysInMonth()), e = 12 * (this.year() - f.year()) + (this.month() - f.month()), e += (this - F(this).startOf("month") - (f - F(f).startOf("month"))) / d, "year" === b && (e /= 12)) : (d = this - f - g, e = "second" === b ? d / 1e3: "minute" === b ? d / 6e4: "hour" === b ? d / 36e5: "day" === b ? d / 864e5: "week" === b ? d / 6048e5: d),
            c ? e: h(e)
        },
        from: function(a, b) {
            return F.duration(this.diff(a)).lang(this.lang()._abbr).humanize(!b)
        },
        fromNow: function(a) {
            return this.from(F(), a)
        },
        calendar: function() {
            var a = this.diff(F().startOf("day"), "days", !0),
            b = -6 > a ? "sameElse": -1 > a ? "lastWeek": 0 > a ? "lastDay": 1 > a ? "sameDay": 2 > a ? "nextDay": 7 > a ? "nextWeek": "sameElse";
            return this.format(this.lang().calendar(b, this))
        },
        isLeapYear: function() {
            var a = this.year();
            return a % 4 === 0 && a % 100 !== 0 || a % 400 === 0
        },
        isDST: function() {
            return this.zone() < F([this.year()]).zone() || this.zone() < F([this.year(), 5]).zone()
        },
        day: function(a) {
            var b = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
            return null == a ? b: this.add({
                d: a - b
            })
        },
        startOf: function(a) {
            switch (a = a.replace(/s$/, "")) {
            case "year":
                this.month(0);
            case "month":
                this.date(1);
            case "week":
            case "day":
                this.hours(0);
            case "hour":
                this.minutes(0);
            case "minute":
                this.seconds(0);
            case "second":
                this.milliseconds(0)
            }
            return "week" === a && this.day(0),
            this
        },
        endOf: function(a) {
            return this.startOf(a).add(a.replace(/s?$/, "s"), 1).subtract("ms", 1)
        },
        isAfter: function(a, b) {
            return b = "undefined" != typeof b ? b: "millisecond",
            +this.clone().startOf(b) > +F(a).startOf(b)
        },
        isBefore: function(a, b) {
            return b = "undefined" != typeof b ? b: "millisecond",
            +this.clone().startOf(b) < +F(a).startOf(b)
        },
        isSame: function(a, b) {
            return b = "undefined" != typeof b ? b: "millisecond",
            +this.clone().startOf(b) === +F(a).startOf(b)
        },
        zone: function() {
            return this._isUTC ? 0 : this._d.getTimezoneOffset()
        },
        daysInMonth: function() {
            return F.utc([this.year(), this.month() + 1, 0]).date()
        },
        dayOfYear: function(a) {
            var b = I((F(this).startOf("day") - F(this).startOf("year")) / 864e5) + 1;
            return null == a ? b: this.add("d", a - b)
        },
        isoWeek: function(a) {
            var b = A(this, 1, 4);
            return null == a ? b: this.add("d", 7 * (a - b))
        },
        week: function(a) {
            var b = this.lang().week(this);
            return null == a ? b: this.add("d", 7 * (a - b))
        },
        lang: function(b) {
            return b === a ? this._lang: (this._lang = n(b), this)
        }
    },
    G = 0; G < _.length; G++) C(_[G].toLowerCase().replace(/s$/, ""), _[G]);
    C("year", "FullYear"),
    F.fn.days = F.fn.day,
    F.fn.weeks = F.fn.week,
    F.fn.isoWeeks = F.fn.isoWeek,
    F.duration.fn = f.prototype = {
        weeks: function() {
            return h(this.days() / 7)
        },
        valueOf: function() {
            return this._milliseconds + 864e5 * this._days + 2592e6 * this._months
        },
        humanize: function(a) {
            var b = +this,
            c = z(b, !a, this.lang());
            return a && (c = this.lang().pastFuture(b, c)),
            this.lang().postformat(c)
        },
        lang: F.fn.lang
    };
    for (G in aa) aa.hasOwnProperty(G) && (E(G, aa[G]), D(G.toLowerCase()));
    E("Weeks", 6048e5),
    F.lang("en", {
        ordinal: function(a) {
            var b = a % 10,
            c = 1 === ~~ (a % 100 / 10) ? "th": 1 === b ? "st": 2 === b ? "nd": 3 === b ? "rd": "th";
            return a + c
        }
    }),
    K && (module.exports = F),
    "undefined" == typeof ender && (this.moment = F),
    "function" == typeof define && define.amd && define("moment", [],
    function() {
        return F
    })
}.call(this),
moment.lang("zh-cn", {
    months: "一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),
    monthsShort: "1 月_2 月_3 月_4 月_5 月_6 月_7 月_8 月_9 月_10 月_11 月_12 月".split("_"),
    weekdays: "星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),
    weekdaysShort: "周日_周一_周二_周三_周四_周五_周六".split("_"),
    weekdaysMin: "日_一_二_三_四_五_六".split("_"),
    longDateFormat: {
        LT: "A h 点 mm 分",
        L: "YYYY 年 MMM D 日",
        LL: "YYYY 年 MMM D 日",
        LLL: "YYYY 年 MMM D 日 LT",
        LLLL: "YYYY 年 MMM D 日ddddLT",
        l: "YYYY 年 MMM D 日",
        ll: "YYYY 年 MMM D 日 ",
        lll: "YYYY 年 MMM D 日LT",
        llll: "YYYY 年 MMM D 日ddddLT"
    },
    meridiem: function(a, b, c) {
        return 9 > a ? "早上": 11 > a ? "上午": 13 > a ? "中午": 18 > a ? "下午": "晚上"
    },
    calendar: {
        sameDay: "[今天]LT",
        nextDay: "[明天]LT",
        nextWeek: "[下]ddddLT",
        lastDay: "[昨天]LT",
        lastWeek: "[上]ddddLT",
        sameElse: "L"
    },
    relativeTime: {
        future: "%s内",
        past: "%s前",
        s: "几秒",
        m: "1 分钟",
        mm: "%d 分钟",
        h: "1 小时",
        hh: "%d 小时",
        d: "1 天",
        dd: "%d 天",
        M: "1 个月",
        MM: "%d 个月",
        y: "1 年",
        yy: "%d 年"
    }
}),
function() {
    function a() {}
    var b = Array.prototype.slice;
    Function.prototype.bind || (Function.prototype.bind = function(c) {
        var d = this;
        if ("function" != typeof d) throw new TypeError("Function.prototype.bind called on incompatible " + d);
        var e = b.call(arguments, 1),
        f = function() {
            if (this instanceof f) {
                var a = d.apply(this, e.concat(b.call(arguments)));
                return Object(a) === a ? a: this
            }
            return d.apply(c, e.concat(b.call(arguments)))
        };
        return d.prototype && (a.prototype = d.prototype, f.prototype = new a, a.prototype = null),
        f
    })
} ();
var QRCode; !
function() {
    function a(a) {
        this.mode = j.MODE_8BIT_BYTE,
        this.data = a,
        this.parsedData = [];
        for (var b = [], c = 0, d = this.data.length; d > c; c++) {
            var e = this.data.charCodeAt(c);
            e > 65536 ? (b[0] = 240 | (1835008 & e) >>> 18, b[1] = 128 | (258048 & e) >>> 12, b[2] = 128 | (4032 & e) >>> 6, b[3] = 128 | 63 & e) : e > 2048 ? (b[0] = 224 | (61440 & e) >>> 12, b[1] = 128 | (4032 & e) >>> 6, b[2] = 128 | 63 & e) : e > 128 ? (b[0] = 192 | (1984 & e) >>> 6, b[1] = 128 | 63 & e) : b[0] = e,
            this.parsedData = this.parsedData.concat(b)
        }
        this.parsedData.length != this.data.length && (this.parsedData.unshift(191), this.parsedData.unshift(187), this.parsedData.unshift(239))
    }
    function b(a, b) {
        this.typeNumber = a,
        this.errorCorrectLevel = b,
        this.modules = null,
        this.moduleCount = 0,
        this.dataCache = null,
        this.dataList = []
    }
    function c(a, b) {
        if (void 0 == a.length) throw new Error(a.length + "/" + b);
        for (var c = 0; c < a.length && 0 == a[c];) c++;
        this.num = new Array(a.length - c + b);
        for (var d = 0; d < a.length - c; d++) this.num[d] = a[d + c]
    }
    function d(a, b) {
        this.totalCount = a,
        this.dataCount = b
    }
    function e() {
        this.buffer = [],
        this.length = 0
    }
    function f() {
        return "undefined" != typeof CanvasRenderingContext2D
    }
    function g() {
        var a = !1,
        b = navigator.userAgent;
        return /android/i.test(b) && (a = !0, aMat = b.toString().match(/android ([0-9]\.[0-9])/i), aMat && aMat[1] && (a = parseFloat(aMat[1]))),
        a
    }
    function h(a, b) {
        for (var c = 1,
        d = i(a), e = 0, f = p.length; f >= e; e++) {
            var g = 0;
            switch (b) {
            case k.L:
                g = p[e][0];
                break;
            case k.M:
                g = p[e][1];
                break;
            case k.Q:
                g = p[e][2];
                break;
            case k.H:
                g = p[e][3]
            }
            if (g >= d) break;
            c++
        }
        if (c > p.length) throw new Error("Too long data");
        return c
    }
    function i(a) {
        var b = encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g, "a");
        return b.length + (b.length != a ? 3 : 0)
    }
    a.prototype = {
        getLength: function() {
            return this.parsedData.length
        },
        write: function(a) {
            for (var b = 0,
            c = this.parsedData.length; c > b; b++) a.put(this.parsedData[b], 8)
        }
    },
    b.prototype = {
        addData: function(b) {
            var c = new a(b);
            this.dataList.push(c),
            this.dataCache = null
        },
        isDark: function(a, b) {
            if (0 > a || this.moduleCount <= a || 0 > b || this.moduleCount <= b) throw new Error(a + "," + b);
            return this.modules[a][b]
        },
        getModuleCount: function() {
            return this.moduleCount
        },
        make: function() {
            this.makeImpl(!1, this.getBestMaskPattern())
        },
        makeImpl: function(a, c) {
            this.moduleCount = 4 * this.typeNumber + 17,
            this.modules = new Array(this.moduleCount);
            for (var d = 0; d < this.moduleCount; d++) {
                this.modules[d] = new Array(this.moduleCount);
                for (var e = 0; e < this.moduleCount; e++) this.modules[d][e] = null
            }
            this.setupPositionProbePattern(0, 0),
            this.setupPositionProbePattern(this.moduleCount - 7, 0),
            this.setupPositionProbePattern(0, this.moduleCount - 7),
            this.setupPositionAdjustPattern(),
            this.setupTimingPattern(),
            this.setupTypeInfo(a, c),
            this.typeNumber >= 7 && this.setupTypeNumber(a),
            null == this.dataCache && (this.dataCache = b.createData(this.typeNumber, this.errorCorrectLevel, this.dataList)),
            this.mapData(this.dataCache, c)
        },
        setupPositionProbePattern: function(a, b) {
            for (var c = -1; 7 >= c; c++) if (! ( - 1 >= a + c || this.moduleCount <= a + c)) for (var d = -1; 7 >= d; d++) - 1 >= b + d || this.moduleCount <= b + d || (this.modules[a + c][b + d] = c >= 0 && 6 >= c && (0 == d || 6 == d) || d >= 0 && 6 >= d && (0 == c || 6 == c) || c >= 2 && 4 >= c && d >= 2 && 4 >= d ? !0 : !1)
        },
        getBestMaskPattern: function() {
            for (var a = 0,
            b = 0,
            c = 0; 8 > c; c++) {
                this.makeImpl(!0, c);
                var d = m.getLostPoint(this); (0 == c || a > d) && (a = d, b = c)
            }
            return b
        },
        createMovieClip: function(a, b, c) {
            var d = a.createEmptyMovieClip(b, c),
            e = 1;
            this.make();
            for (var f = 0; f < this.modules.length; f++) for (var g = f * e,
            h = 0; h < this.modules[f].length; h++) {
                var i = h * e,
                j = this.modules[f][h];
                j && (d.beginFill(0, 100), d.moveTo(i, g), d.lineTo(i + e, g), d.lineTo(i + e, g + e), d.lineTo(i, g + e), d.endFill())
            }
            return d
        },
        setupTimingPattern: function() {
            for (var a = 8; a < this.moduleCount - 8; a++) null == this.modules[a][6] && (this.modules[a][6] = 0 == a % 2);
            for (var b = 8; b < this.moduleCount - 8; b++) null == this.modules[6][b] && (this.modules[6][b] = 0 == b % 2)
        },
        setupPositionAdjustPattern: function() {
            for (var a = m.getPatternPosition(this.typeNumber), b = 0; b < a.length; b++) for (var c = 0; c < a.length; c++) {
                var d = a[b],
                e = a[c];
                if (null == this.modules[d][e]) for (var f = -2; 2 >= f; f++) for (var g = -2; 2 >= g; g++) this.modules[d + f][e + g] = -2 == f || 2 == f || -2 == g || 2 == g || 0 == f && 0 == g ? !0 : !1
            }
        },
        setupTypeNumber: function(a) {
            for (var b = m.getBCHTypeNumber(this.typeNumber), c = 0; 18 > c; c++) {
                var d = !a && 1 == (1 & b >> c);
                this.modules[Math.floor(c / 3)][c % 3 + this.moduleCount - 8 - 3] = d
            }
            for (var c = 0; 18 > c; c++) {
                var d = !a && 1 == (1 & b >> c);
                this.modules[c % 3 + this.moduleCount - 8 - 3][Math.floor(c / 3)] = d
            }
        },
        setupTypeInfo: function(a, b) {
            for (var c = this.errorCorrectLevel << 3 | b,
            d = m.getBCHTypeInfo(c), e = 0; 15 > e; e++) {
                var f = !a && 1 == (1 & d >> e);
                6 > e ? this.modules[e][8] = f: 8 > e ? this.modules[e + 1][8] = f: this.modules[this.moduleCount - 15 + e][8] = f
            }
            for (var e = 0; 15 > e; e++) {
                var f = !a && 1 == (1 & d >> e);
                8 > e ? this.modules[8][this.moduleCount - e - 1] = f: 9 > e ? this.modules[8][15 - e - 1 + 1] = f: this.modules[8][15 - e - 1] = f
            }
            this.modules[this.moduleCount - 8][8] = !a
        },
        mapData: function(a, b) {
            for (var c = -1,
            d = this.moduleCount - 1,
            e = 7,
            f = 0,
            g = this.moduleCount - 1; g > 0; g -= 2) for (6 == g && g--;;) {
                for (var h = 0; 2 > h; h++) if (null == this.modules[d][g - h]) {
                    var i = !1;
                    f < a.length && (i = 1 == (1 & a[f] >>> e));
                    var j = m.getMask(b, d, g - h);
                    j && (i = !i),
                    this.modules[d][g - h] = i,
                    e--,
                    -1 == e && (f++, e = 7)
                }
                if (d += c, 0 > d || this.moduleCount <= d) {
                    d -= c,
                    c = -c;
                    break
                }
            }
        }
    },
    b.PAD0 = 236,
    b.PAD1 = 17,
    b.createData = function(a, c, f) {
        for (var g = d.getRSBlocks(a, c), h = new e, i = 0; i < f.length; i++) {
            var j = f[i];
            h.put(j.mode, 4),
            h.put(j.getLength(), m.getLengthInBits(j.mode, a)),
            j.write(h)
        }
        for (var k = 0,
        i = 0; i < g.length; i++) k += g[i].dataCount;
        if (h.getLengthInBits() > 8 * k) throw new Error("code length overflow. (" + h.getLengthInBits() + ">" + 8 * k + ")");
        for (h.getLengthInBits() + 4 <= 8 * k && h.put(0, 4); 0 != h.getLengthInBits() % 8;) h.putBit(!1);
        for (; ! (h.getLengthInBits() >= 8 * k) && (h.put(b.PAD0, 8), !(h.getLengthInBits() >= 8 * k));) h.put(b.PAD1, 8);
        return b.createBytes(h, g)
    },
    b.createBytes = function(a, b) {
        for (var d = 0,
        e = 0,
        f = 0,
        g = new Array(b.length), h = new Array(b.length), i = 0; i < b.length; i++) {
            var j = b[i].dataCount,
            k = b[i].totalCount - j;
            e = Math.max(e, j),
            f = Math.max(f, k),
            g[i] = new Array(j);
            for (var l = 0; l < g[i].length; l++) g[i][l] = 255 & a.buffer[l + d];
            d += j;
            var n = m.getErrorCorrectPolynomial(k),
            o = new c(g[i], n.getLength() - 1),
            p = o.mod(n);
            h[i] = new Array(n.getLength() - 1);
            for (var l = 0; l < h[i].length; l++) {
                var q = l + p.getLength() - h[i].length;
                h[i][l] = q >= 0 ? p.get(q) : 0
            }
        }
        for (var r = 0,
        l = 0; l < b.length; l++) r += b[l].totalCount;
        for (var s = new Array(r), t = 0, l = 0; e > l; l++) for (var i = 0; i < b.length; i++) l < g[i].length && (s[t++] = g[i][l]);
        for (var l = 0; f > l; l++) for (var i = 0; i < b.length; i++) l < h[i].length && (s[t++] = h[i][l]);
        return s
    };
    for (var j = {
        MODE_NUMBER: 1,
        MODE_ALPHA_NUM: 2,
        MODE_8BIT_BYTE: 4,
        MODE_KANJI: 8
    },
    k = {
        L: 1,
        M: 0,
        Q: 3,
        H: 2
    },
    l = {
        PATTERN000: 0,
        PATTERN001: 1,
        PATTERN010: 2,
        PATTERN011: 3,
        PATTERN100: 4,
        PATTERN101: 5,
        PATTERN110: 6,
        PATTERN111: 7
    },
    m = {
        PATTERN_POSITION_TABLE: [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]],
        G15: 1335,
        G18: 7973,
        G15_MASK: 21522,
        getBCHTypeInfo: function(a) {
            for (var b = a << 10; m.getBCHDigit(b) - m.getBCHDigit(m.G15) >= 0;) b ^= m.G15 << m.getBCHDigit(b) - m.getBCHDigit(m.G15);
            return (a << 10 | b) ^ m.G15_MASK
        },
        getBCHTypeNumber: function(a) {
            for (var b = a << 12; m.getBCHDigit(b) - m.getBCHDigit(m.G18) >= 0;) b ^= m.G18 << m.getBCHDigit(b) - m.getBCHDigit(m.G18);
            return a << 12 | b
        },
        getBCHDigit: function(a) {
            for (var b = 0; 0 != a;) b++,
            a >>>= 1;
            return b
        },
        getPatternPosition: function(a) {
            return m.PATTERN_POSITION_TABLE[a - 1]
        },
        getMask: function(a, b, c) {
            switch (a) {
            case l.PATTERN000:
                return 0 == (b + c) % 2;
            case l.PATTERN001:
                return 0 == b % 2;
            case l.PATTERN010:
                return 0 == c % 3;
            case l.PATTERN011:
                return 0 == (b + c) % 3;
            case l.PATTERN100:
                return 0 == (Math.floor(b / 2) + Math.floor(c / 3)) % 2;
            case l.PATTERN101:
                return 0 == b * c % 2 + b * c % 3;
            case l.PATTERN110:
                return 0 == (b * c % 2 + b * c % 3) % 2;
            case l.PATTERN111:
                return 0 == (b * c % 3 + (b + c) % 2) % 2;
            default:
                throw new Error("bad maskPattern:" + a)
            }
        },
        getErrorCorrectPolynomial: function(a) {
            for (var b = new c([1], 0), d = 0; a > d; d++) b = b.multiply(new c([1, n.gexp(d)], 0));
            return b
        },
        getLengthInBits: function(a, b) {
            if (b >= 1 && 10 > b) switch (a) {
            case j.MODE_NUMBER:
                return 10;
            case j.MODE_ALPHA_NUM:
                return 9;
            case j.MODE_8BIT_BYTE:
                return 8;
            case j.MODE_KANJI:
                return 8;
            default:
                throw new Error("mode:" + a)
            } else if (27 > b) switch (a) {
            case j.MODE_NUMBER:
                return 12;
            case j.MODE_ALPHA_NUM:
                return 11;
            case j.MODE_8BIT_BYTE:
                return 16;
            case j.MODE_KANJI:
                return 10;
            default:
                throw new Error("mode:" + a)
            } else {
                if (! (41 > b)) throw new Error("type:" + b);
                switch (a) {
                case j.MODE_NUMBER:
                    return 14;
                case j.MODE_ALPHA_NUM:
                    return 13;
                case j.MODE_8BIT_BYTE:
                    return 16;
                case j.MODE_KANJI:
                    return 12;
                default:
                    throw new Error("mode:" + a)
                }
            }
        },
        getLostPoint: function(a) {
            for (var b = a.getModuleCount(), c = 0, d = 0; b > d; d++) for (var e = 0; b > e; e++) {
                for (var f = 0,
                g = a.isDark(d, e), h = -1; 1 >= h; h++) if (! (0 > d + h || d + h >= b)) for (var i = -1; 1 >= i; i++) 0 > e + i || e + i >= b || (0 != h || 0 != i) && g == a.isDark(d + h, e + i) && f++;
                f > 5 && (c += 3 + f - 5)
            }
            for (var d = 0; b - 1 > d; d++) for (var e = 0; b - 1 > e; e++) {
                var j = 0;
                a.isDark(d, e) && j++,
                a.isDark(d + 1, e) && j++,
                a.isDark(d, e + 1) && j++,
                a.isDark(d + 1, e + 1) && j++,
                (0 == j || 4 == j) && (c += 3)
            }
            for (var d = 0; b > d; d++) for (var e = 0; b - 6 > e; e++) a.isDark(d, e) && !a.isDark(d, e + 1) && a.isDark(d, e + 2) && a.isDark(d, e + 3) && a.isDark(d, e + 4) && !a.isDark(d, e + 5) && a.isDark(d, e + 6) && (c += 40);
            for (var e = 0; b > e; e++) for (var d = 0; b - 6 > d; d++) a.isDark(d, e) && !a.isDark(d + 1, e) && a.isDark(d + 2, e) && a.isDark(d + 3, e) && a.isDark(d + 4, e) && !a.isDark(d + 5, e) && a.isDark(d + 6, e) && (c += 40);
            for (var k = 0,
            e = 0; b > e; e++) for (var d = 0; b > d; d++) a.isDark(d, e) && k++;
            var l = Math.abs(100 * k / b / b - 50) / 5;
            return c += 10 * l
        }
    },
    n = {
        glog: function(a) {
            if (1 > a) throw new Error("glog(" + a + ")");
            return n.LOG_TABLE[a]
        },
        gexp: function(a) {
            for (; 0 > a;) a += 255;
            for (; a >= 256;) a -= 255;
            return n.EXP_TABLE[a]
        },
        EXP_TABLE: new Array(256),
        LOG_TABLE: new Array(256)
    },
    o = 0; 8 > o; o++) n.EXP_TABLE[o] = 1 << o;
    for (var o = 8; 256 > o; o++) n.EXP_TABLE[o] = n.EXP_TABLE[o - 4] ^ n.EXP_TABLE[o - 5] ^ n.EXP_TABLE[o - 6] ^ n.EXP_TABLE[o - 8];
    for (var o = 0; 255 > o; o++) n.LOG_TABLE[n.EXP_TABLE[o]] = o;
    c.prototype = {
        get: function(a) {
            return this.num[a]
        },
        getLength: function() {
            return this.num.length
        },
        multiply: function(a) {
            for (var b = new Array(this.getLength() + a.getLength() - 1), d = 0; d < this.getLength(); d++) for (var e = 0; e < a.getLength(); e++) b[d + e] ^= n.gexp(n.glog(this.get(d)) + n.glog(a.get(e)));
            return new c(b, 0)
        },
        mod: function(a) {
            if (this.getLength() - a.getLength() < 0) return this;
            for (var b = n.glog(this.get(0)) - n.glog(a.get(0)), d = new Array(this.getLength()), e = 0; e < this.getLength(); e++) d[e] = this.get(e);
            for (var e = 0; e < a.getLength(); e++) d[e] ^= n.gexp(n.glog(a.get(e)) + b);
            return new c(d, 0).mod(a)
        }
    },
    d.RS_BLOCK_TABLE = [[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], [2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], [4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], [2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], [4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], [3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], [5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12], [5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], [1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], [5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], [3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], [3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16], [4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], [2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], [4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], [6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], [8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], [10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], [8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], [3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], [7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], [5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], [13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], [17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], [17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16], [13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], [12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], [6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], [17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], [4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], [20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16], [19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]],
    d.getRSBlocks = function(a, b) {
        var c = d.getRsBlockTable(a, b);
        if (void 0 == c) throw new Error("bad rs block @ typeNumber:" + a + "/errorCorrectLevel:" + b);
        for (var e = c.length / 3,
        f = [], g = 0; e > g; g++) for (var h = c[3 * g + 0], i = c[3 * g + 1], j = c[3 * g + 2], k = 0; h > k; k++) f.push(new d(i, j));
        return f
    },
    d.getRsBlockTable = function(a, b) {
        switch (b) {
        case k.L:
            return d.RS_BLOCK_TABLE[4 * (a - 1) + 0];
        case k.M:
            return d.RS_BLOCK_TABLE[4 * (a - 1) + 1];
        case k.Q:
            return d.RS_BLOCK_TABLE[4 * (a - 1) + 2];
        case k.H:
            return d.RS_BLOCK_TABLE[4 * (a - 1) + 3];
        default:
            return void 0
        }
    },
    e.prototype = {
        get: function(a) {
            var b = Math.floor(a / 8);
            return 1 == (1 & this.buffer[b] >>> 7 - a % 8)
        },
        put: function(a, b) {
            for (var c = 0; b > c; c++) this.putBit(1 == (1 & a >>> b - c - 1))
        },
        getLengthInBits: function() {
            return this.length
        },
        putBit: function(a) {
            var b = Math.floor(this.length / 8);
            this.buffer.length <= b && this.buffer.push(0),
            a && (this.buffer[b] |= 128 >>> this.length % 8),
            this.length++
        }
    };
    var p = [[17, 14, 11, 7], [32, 26, 20, 14], [53, 42, 32, 24], [78, 62, 46, 34], [106, 84, 60, 44], [134, 106, 74, 58], [154, 122, 86, 64], [192, 152, 108, 84], [230, 180, 130, 98], [271, 213, 151, 119], [321, 251, 177, 137], [367, 287, 203, 155], [425, 331, 241, 177], [458, 362, 258, 194], [520, 412, 292, 220], [586, 450, 322, 250], [644, 504, 364, 280], [718, 560, 394, 310], [792, 624, 442, 338], [858, 666, 482, 382], [929, 711, 509, 403], [1003, 779, 565, 439], [1091, 857, 611, 461], [1171, 911, 661, 511], [1273, 997, 715, 535], [1367, 1059, 751, 593], [1465, 1125, 805, 625], [1528, 1190, 868, 658], [1628, 1264, 908, 698], [1732, 1370, 982, 742], [1840, 1452, 1030, 790], [1952, 1538, 1112, 842], [2068, 1628, 1168, 898], [2188, 1722, 1228, 958], [2303, 1809, 1283, 983], [2431, 1911, 1351, 1051], [2563, 1989, 1423, 1093], [2699, 2099, 1499, 1139], [2809, 2213, 1579, 1219], [2953, 2331, 1663, 1273]],
    q = function() {
        var a = function(a, b) {
            this._el = a,
            this._htOption = b
        };
        return a.prototype.draw = function(a) {
            function b(a, b) {
                var c = document.createElementNS("http://www.w3.org/2000/svg", a);
                for (var d in b) b.hasOwnProperty(d) && c.setAttribute(d, b[d]);
                return c
            }
            var c = this._htOption,
            d = this._el,
            e = a.getModuleCount();
            Math.floor(c.width / e),
            Math.floor(c.height / e),
            this.clear();
            var f = b("svg", {
                viewBox: "0 0 " + String(e) + " " + String(e),
                width: "100%",
                height: "100%",
                fill: c.colorLight
            });
            f.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink"),
            d.appendChild(f),
            f.appendChild(b("rect", {
                fill: c.colorDark,
                width: "1",
                height: "1",
                id: "template"
            }));
            for (var g = 0; e > g; g++) for (var h = 0; e > h; h++) if (a.isDark(g, h)) {
                var i = b("use", {
                    x: String(g),
                    y: String(h)
                });
                i.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#template"),
                f.appendChild(i)
            }
        },
        a.prototype.clear = function() {
            for (; this._el.hasChildNodes();) this._el.removeChild(this._el.lastChild)
        },
        a
    } (),
    r = "svg" === document.documentElement.tagName.toLowerCase(),
    s = r ? q: f() ?
    function() {
        function a() {
            this._elImage.src = this._elCanvas.toDataURL("image/png"),
            this._elImage.style.display = "block",
            this._elCanvas.style.display = "none"
        }
        function b(a, b) {
            var c = this;
            if (c._fFail = b, c._fSuccess = a, null === c._bSupportDataURI) {
                var d = document.createElement("img"),
                e = function() {
                    c._bSupportDataURI = !1,
                    c._fFail && _fFail.call(c)
                },
                f = function() {
                    c._bSupportDataURI = !0,
                    c._fSuccess && c._fSuccess.call(c)
                };
                return d.onabort = e,
                d.onerror = e,
                d.onload = f,
                void(d.src = "")
            }
            c._bSupportDataURI === !0 && c._fSuccess ? c._fSuccess.call(c) : c._bSupportDataURI === !1 && c._fFail && c._fFail.call(c)
        }
        if (this._android && this._android <= 2.1) {
            var c = 1 / window.devicePixelRatio,
            d = CanvasRenderingContext2D.prototype.drawImage;
            CanvasRenderingContext2D.prototype.drawImage = function(a, b, e, f, g, h, i, j) {
                if ("nodeName" in a && /img/i.test(a.nodeName)) for (var k = arguments.length - 1; k >= 1; k--) arguments[k] = arguments[k] * c;
                else "undefined" == typeof j && (arguments[1] *= c, arguments[2] *= c, arguments[3] *= c, arguments[4] *= c);
                d.apply(this, arguments)
            }
        }
        var e = function(a, b) {
            this._bIsPainted = !1,
            this._android = g(),
            this._htOption = b,
            this._elCanvas = document.createElement("canvas"),
            this._elCanvas.width = b.width,
            this._elCanvas.height = b.height,
            a.appendChild(this._elCanvas),
            this._el = a,
            this._oContext = this._elCanvas.getContext("2d"),
            this._bIsPainted = !1,
            this._elImage = document.createElement("img"),
            this._elImage.style.display = "none",
            this._el.appendChild(this._elImage),
            this._bSupportDataURI = null
        };
        return e.prototype.draw = function(a) {
            var b = this._elImage,
            c = this._oContext,
            d = this._htOption,
            e = a.getModuleCount(),
            f = d.width / e,
            g = d.height / e,
            h = Math.round(f),
            i = Math.round(g);
            b.style.display = "none",
            this.clear();
            for (var j = 0; e > j; j++) for (var k = 0; e > k; k++) {
                var l = a.isDark(j, k),
                m = k * f,
                n = j * g;
                c.strokeStyle = l ? d.colorDark: d.colorLight,
                c.lineWidth = 1,
                c.fillStyle = l ? d.colorDark: d.colorLight,
                c.fillRect(m, n, f, g),
                c.strokeRect(Math.floor(m) + .5, Math.floor(n) + .5, h, i),
                c.strokeRect(Math.ceil(m) - .5, Math.ceil(n) - .5, h, i)
            }
            this._bIsPainted = !0
        },
        e.prototype.makeImage = function() {
            this._bIsPainted && b.call(this, a)
        },
        e.prototype.isPainted = function() {
            return this._bIsPainted
        },
        e.prototype.clear = function() {
            this._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height),
            this._bIsPainted = !1
        },
        e.prototype.round = function(a) {
            return a ? Math.floor(1e3 * a) / 1e3: a
        },
        e
    } () : function() {
        var a = function(a, b) {
            this._el = a,
            this._htOption = b
        };
        return a.prototype.draw = function(a) {
            for (var b = this._htOption,
            c = this._el,
            d = a.getModuleCount(), e = Math.floor(b.width / d), f = Math.floor(b.height / d), g = ['<table style="border:0;border-collapse:collapse;">'], h = 0; d > h; h++) {
                g.push("<tr>");
                for (var i = 0; d > i; i++) g.push('<td style="border:0;border-collapse:collapse;padding:0;margin:0;width:' + e + "px;height:" + f + "px;background-color:" + (a.isDark(h, i) ? b.colorDark: b.colorLight) + ';"></td>');
                g.push("</tr>")
            }
            g.push("</table>"),
            c.innerHTML = g.join("");
            var j = c.childNodes[0],
            k = (b.width - j.offsetWidth) / 2,
            l = (b.height - j.offsetHeight) / 2;
            k > 0 && l > 0 && (j.style.margin = l + "px " + k + "px")
        },
        a.prototype.clear = function() {
            this._el.innerHTML = ""
        },
        a
    } ();
    QRCode = function(a, b) {
        if (this._htOption = {
            width: 256,
            height: 256,
            typeNumber: 4,
            colorDark: "#000000",
            colorLight: "#ffffff",
            correctLevel: k.H
        },
        "string" == typeof b && (b = {
            text: b
        }), b) for (var c in b) this._htOption[c] = b[c];
        "string" == typeof a && (a = document.getElementById(a)),
        this._android = g(),
        this._el = a,
        this._oQRCode = null,
        this._oDrawing = new s(this._el, this._htOption),
        this._htOption.text && this.makeCode(this._htOption.text)
    },
    QRCode.prototype.makeCode = function(a) {
        this._oQRCode = new b(h(a, this._htOption.correctLevel), this._htOption.correctLevel),
        this._oQRCode.addData(a),
        this._oQRCode.make(),
        this._el.title = a,
        this._oDrawing.draw(this._oQRCode),
        this.makeImage()
    },
    QRCode.prototype.makeImage = function() {
        "function" == typeof this._oDrawing.makeImage && (!this._android || this._android >= 3) && this._oDrawing.makeImage()
    },
    QRCode.prototype.clear = function() {
        this._oDrawing.clear()
    },
    QRCode.CorrectLevel = k
} (),
!
function(a) {
    "use strict";
    function b(a, c, d) {
        var e, f = document.createElement("img");
        return f.onerror = function(e) {
            return b.onerror(f, e, a, c, d)
        },
        f.onload = function(e) {
            return b.onload(f, e, a, c, d)
        },
        "string" == typeof a ? (b.fetchBlob(a,
        function(c) {
            c ? (a = c, e = b.createObjectURL(a)) : (e = a, d && d.crossOrigin && (f.crossOrigin = d.crossOrigin)),
            f.src = e
        },
        d), f) : b.isInstanceOf("Blob", a) || b.isInstanceOf("File", a) ? (e = f._objectURL = b.createObjectURL(a), e ? (f.src = e, f) : b.readFile(a,
        function(a) {
            var b = a.target;
            b && b.result ? f.src = b.result: c && c(a)
        })) : void 0
    }
    function c(a, c) { ! a._objectURL || c && c.noRevoke || (b.revokeObjectURL(a._objectURL), delete a._objectURL)
    }
    var d = window.createObjectURL && window || window.URL && URL.revokeObjectURL && URL || window.webkitURL && webkitURL;
    b.fetchBlob = function(a, b, c) {
        b()
    },
    b.isInstanceOf = function(a, b) {
        return Object.prototype.toString.call(b) === "[object " + a + "]"
    },
    b.transform = function(a, b, c, d, e) {
        c(a, e)
    },
    b.onerror = function(a, b, d, e, f) {
        c(a, f),
        e && e.call(a, b)
    },
    b.onload = function(a, d, e, f, g) {
        c(a, g),
        f && b.transform(a, g, f, e, {})
    },
    b.createObjectURL = function(a) {
        return !! d && d.createObjectURL(a)
    },
    b.revokeObjectURL = function(a) {
        return !! d && d.revokeObjectURL(a)
    },
    b.readFile = function(a, b, c) {
        if (window.FileReader) {
            var d = new FileReader;
            if (d.onload = d.onerror = b, c = c || "readAsDataURL", d[c]) return d[c](a),
            d
        }
        return ! 1
    },
    "function" == typeof define && define.amd ? define(function() {
        return b
    }) : "object" == typeof module && module.exports ? module.exports = b: a.loadImage = b
} (window),
function(a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["./load-image"], a) : a("object" == typeof module && module.exports ? require("./load-image") : window.loadImage)
} (function(a) {
    "use strict";
    var b = a.transform;
    a.transform = function(c, d, e, f, g) {
        b.call(a, a.scale(c, d, g), d, e, f, g)
    },
    a.transformCoordinates = function() {},
    a.getTransformedOptions = function(a, b) {
        var c, d, e, f, g = b.aspectRatio;
        if (!g) return b;
        c = {};
        for (d in b) b.hasOwnProperty(d) && (c[d] = b[d]);
        return c.crop = !0,
        e = a.naturalWidth || a.width,
        f = a.naturalHeight || a.height,
        e / f > g ? (c.maxWidth = f * g, c.maxHeight = f) : (c.maxWidth = e, c.maxHeight = e / g),
        c
    },
    a.renderImageToCanvas = function(a, b, c, d, e, f, g, h, i, j) {
        return a.getContext("2d").drawImage(b, c, d, e, f, g, h, i, j),
        a
    },
    a.hasCanvasOption = function(a) {
        return a.canvas || a.crop || !!a.aspectRatio
    },
    a.scale = function(b, c, d) {
        function e() {
            var a = Math.max((i || v) / v, (j || w) / w);
            a > 1 && (v *= a, w *= a)
        }
        function f() {
            var a = Math.min((g || v) / v, (h || w) / w);
            1 > a && (v *= a, w *= a)
        }
        c = c || {};
        var g, h, i, j, k, l, m, n, o, p, q, r = document.createElement("canvas"),
        s = b.getContext || a.hasCanvasOption(c) && r.getContext,
        t = b.naturalWidth || b.width,
        u = b.naturalHeight || b.height,
        v = t,
        w = u;
        if (s && (c = a.getTransformedOptions(b, c, d), m = c.left || 0, n = c.top || 0, c.sourceWidth ? (k = c.sourceWidth, void 0 !== c.right && void 0 === c.left && (m = t - k - c.right)) : k = t - m - (c.right || 0), c.sourceHeight ? (l = c.sourceHeight, void 0 !== c.bottom && void 0 === c.top && (n = u - l - c.bottom)) : l = u - n - (c.bottom || 0), v = k, w = l), g = c.maxWidth, h = c.maxHeight, i = c.minWidth, j = c.minHeight, s && g && h && c.crop ? (v = g, w = h, q = k / l - g / h, 0 > q ? (l = h * k / g, void 0 === c.top && void 0 === c.bottom && (n = (u - l) / 2)) : q > 0 && (k = g * l / h, void 0 === c.left && void 0 === c.right && (m = (t - k) / 2))) : ((c.contain || c.cover) && (i = g = g || i, j = h = h || j), c.cover ? (f(), e()) : (e(), f())), s) {
            if (o = c.pixelRatio, o > 1 && (r.style.width = v + "px", r.style.height = w + "px", v *= o, w *= o, r.getContext("2d").scale(o, o)), p = c.downsamplingRatio, p > 0 && 1 > p && k > v && l > w) for (; k * p > v;) r.width = k * p,
            r.height = l * p,
            a.renderImageToCanvas(r, b, m, n, k, l, 0, 0, r.width, r.height),
            m = 0,
            n = 0,
            k = r.width,
            l = r.height,
            b = document.createElement("canvas"),
            b.width = k,
            b.height = l,
            a.renderImageToCanvas(b, r, 0, 0, k, l, 0, 0, k, l);
            return r.width = v,
            r.height = w,
            a.transformCoordinates(r, c),
            a.renderImageToCanvas(r, b, m, n, k, l, 0, 0, v, w)
        }
        return b.width = v,
        b.height = w,
        b
    }
}),
function(a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["./load-image"], a) : a("object" == typeof module && module.exports ? require("./load-image") : window.loadImage)
} (function(a) {
    "use strict";
    var b = window.Blob && (Blob.prototype.slice || Blob.prototype.webkitSlice || Blob.prototype.mozSlice);
    a.blobSlice = b &&
    function() {
        var a = this.slice || this.webkitSlice || this.mozSlice;
        return a.apply(this, arguments)
    },
    a.metaDataParsers = {
        jpeg: {
            65505 : []
        }
    },
    a.parseMetaData = function(b, c, d, e) {
        d = d || {},
        e = e || {};
        var f = this,
        g = d.maxMetaDataSize || 262144,
        h = !(window.DataView && b && b.size >= 12 && "image/jpeg" === b.type && a.blobSlice); ! h && a.readFile(a.blobSlice.call(b, 0, g),
        function(b) {
            if (b.target.error) return console.log(b.target.error),
            void c(e);
            var g, h, i, j, k = b.target.result,
            l = new DataView(k),
            m = 2,
            n = l.byteLength - 4,
            o = m;
            if (65496 === l.getUint16(0)) {
                for (; n > m && (g = l.getUint16(m), g >= 65504 && 65519 >= g || 65534 === g);) {
                    if (h = l.getUint16(m + 2) + 2, m + h > l.byteLength) {
                        console.log("Invalid meta data: Invalid segment size.");
                        break
                    }
                    if (i = a.metaDataParsers.jpeg[g]) for (j = 0; j < i.length; j += 1) i[j].call(f, l, m, h, e, d);
                    m += h,
                    o = m
                } ! d.disableImageHead && o > 6 && (k.slice ? e.imageHead = k.slice(0, o) : e.imageHead = new Uint8Array(k).subarray(0, o))
            } else console.log("Invalid JPEG file: Missing JPEG marker.");
            c(e)
        },
        "readAsArrayBuffer") || c(e)
    },
    a.hasMetaOption = function(a) {
        return a && a.meta
    };
    var c = a.transform;
    a.transform = function(b, d, e, f, g) {
        a.hasMetaOption(d) ? a.parseMetaData(f,
        function(g) {
            c.call(a, b, d, e, f, g)
        },
        d, g) : c.apply(a, arguments)
    }
}),
function(a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["./load-image", "./load-image-meta"], a) : "object" == typeof module && module.exports ? a(require("./load-image"), require("./load-image-meta")) : a(window.loadImage)
} (function(a) {
    "use strict";
    "fetch" in window && "Request" in window && (a.fetchBlob = function(b, c, d) {
        return a.hasMetaOption(d) ? fetch(new Request(b, d)).then(function(a) {
            return a.blob()
        }).then(c)["catch"](function(a) {
            console.log(a),
            c()
        }) : void c()
    })
}),
function(a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["./load-image", "./load-image-meta"], a) : "object" == typeof module && module.exports ? a(require("./load-image"), require("./load-image-meta")) : a(window.loadImage)
} (function(a) {
    "use strict";
    a.ExifMap = function() {
        return this
    },
    a.ExifMap.prototype.map = {
        Orientation: 274
    },
    a.ExifMap.prototype.get = function(a) {
        return this[a] || this[this.map[a]]
    },
    a.getExifThumbnail = function(a, b, c) {
        var d, e, f;
        if (!c || b + c > a.byteLength) return void console.log("Invalid Exif data: Invalid thumbnail data.");
        for (d = [], e = 0; c > e; e += 1) f = a.getUint8(b + e),
        d.push((16 > f ? "0": "") + f.toString(16));
        return "data:image/jpeg,%" + d.join("%")
    },
    a.exifTagTypes = {
        1 : {
            getValue: function(a, b) {
                return a.getUint8(b)
            },
            size: 1
        },
        2 : {
            getValue: function(a, b) {
                return String.fromCharCode(a.getUint8(b))
            },
            size: 1,
            ascii: !0
        },
        3 : {
            getValue: function(a, b, c) {
                return a.getUint16(b, c)
            },
            size: 2
        },
        4 : {
            getValue: function(a, b, c) {
                return a.getUint32(b, c)
            },
            size: 4
        },
        5 : {
            getValue: function(a, b, c) {
                return a.getUint32(b, c) / a.getUint32(b + 4, c)
            },
            size: 8
        },
        9 : {
            getValue: function(a, b, c) {
                return a.getInt32(b, c)
            },
            size: 4
        },
        10 : {
            getValue: function(a, b, c) {
                return a.getInt32(b, c) / a.getInt32(b + 4, c)
            },
            size: 8
        }
    },
    a.exifTagTypes[7] = a.exifTagTypes[1],
    a.getExifValue = function(b, c, d, e, f, g) {
        var h, i, j, k, l, m, n = a.exifTagTypes[e];
        if (!n) return void console.log("Invalid Exif data: Invalid tag type.");
        if (h = n.size * f, i = h > 4 ? c + b.getUint32(d + 8, g) : d + 8, i + h > b.byteLength) return void console.log("Invalid Exif data: Invalid data offset.");
        if (1 === f) return n.getValue(b, i, g);
        for (j = [], k = 0; f > k; k += 1) j[k] = n.getValue(b, i + k * n.size, g);
        if (n.ascii) {
            for (l = "", k = 0; k < j.length && (m = j[k], "\x00" !== m); k += 1) l += m;
            return l
        }
        return j
    },
    a.parseExifTag = function(b, c, d, e, f) {
        var g = b.getUint16(d, e);
        f.exif[g] = a.getExifValue(b, c, d, b.getUint16(d + 2, e), b.getUint32(d + 4, e), e)
    },
    a.parseExifTags = function(a, b, c, d, e) {
        var f, g, h;
        if (c + 6 > a.byteLength) return void console.log("Invalid Exif data: Invalid directory offset.");
        if (f = a.getUint16(c, d), g = c + 2 + 12 * f, g + 4 > a.byteLength) return void console.log("Invalid Exif data: Invalid directory size.");
        for (h = 0; f > h; h += 1) this.parseExifTag(a, b, c + 2 + 12 * h, d, e);
        return a.getUint32(g, d)
    },
    a.parseExifData = function(b, c, d, e, f) {
        if (!f.disableExif) {
            var g, h, i, j = c + 10;
            if (1165519206 === b.getUint32(c + 4)) {
                if (j + 8 > b.byteLength) return void console.log("Invalid Exif data: Invalid segment size.");
                if (0 !== b.getUint16(c + 8)) return void console.log("Invalid Exif data: Missing byte alignment offset.");
                switch (b.getUint16(j)) {
                case 18761:
                    g = !0;
                    break;
                case 19789:
                    g = !1;
                    break;
                default:
                    return void console.log("Invalid Exif data: Invalid byte alignment marker.")
                }
                if (42 !== b.getUint16(j + 2, g)) return void console.log("Invalid Exif data: Missing TIFF marker.");
                h = b.getUint32(j + 4, g),
                e.exif = new a.ExifMap,
                h = a.parseExifTags(b, j, j + h, g, e),
                h && !f.disableExifThumbnail && (i = {
                    exif: {}
                },
                h = a.parseExifTags(b, j, j + h, g, i), i.exif[513] && (e.exif.Thumbnail = a.getExifThumbnail(b, j + i.exif[513], i.exif[514]))),
                e.exif[34665] && !f.disableExifSub && a.parseExifTags(b, j, j + e.exif[34665], g, e),
                e.exif[34853] && !f.disableExifGps && a.parseExifTags(b, j, j + e.exif[34853], g, e)
            }
        }
    },
    a.metaDataParsers.jpeg[65505].push(a.parseExifData)
}),
function(a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["./load-image", "./load-image-exif"], a) : "object" == typeof module && module.exports ? a(require("./load-image"), require("./load-image-exif")) : a(window.loadImage)
} (function(a) {
    "use strict";
    a.ExifMap.prototype.tags = {
        256 : "ImageWidth",
        257 : "ImageHeight",
        34665 : "ExifIFDPointer",
        34853 : "GPSInfoIFDPointer",
        40965 : "InteroperabilityIFDPointer",
        258 : "BitsPerSample",
        259 : "Compression",
        262 : "PhotometricInterpretation",
        274 : "Orientation",
        277 : "SamplesPerPixel",
        284 : "PlanarConfiguration",
        530 : "YCbCrSubSampling",
        531 : "YCbCrPositioning",
        282 : "XResolution",
        283 : "YResolution",
        296 : "ResolutionUnit",
        273 : "StripOffsets",
        278 : "RowsPerStrip",
        279 : "StripByteCounts",
        513 : "JPEGInterchangeFormat",
        514 : "JPEGInterchangeFormatLength",
        301 : "TransferFunction",
        318 : "WhitePoint",
        319 : "PrimaryChromaticities",
        529 : "YCbCrCoefficients",
        532 : "ReferenceBlackWhite",
        306 : "DateTime",
        270 : "ImageDescription",
        271 : "Make",
        272 : "Model",
        305 : "Software",
        315 : "Artist",
        33432 : "Copyright",
        36864 : "ExifVersion",
        40960 : "FlashpixVersion",
        40961 : "ColorSpace",
        40962 : "PixelXDimension",
        40963 : "PixelYDimension",
        42240 : "Gamma",
        37121 : "ComponentsConfiguration",
        37122 : "CompressedBitsPerPixel",
        37500 : "MakerNote",
        37510 : "UserComment",
        40964 : "RelatedSoundFile",
        36867 : "DateTimeOriginal",
        36868 : "DateTimeDigitized",
        37520 : "SubSecTime",
        37521 : "SubSecTimeOriginal",
        37522 : "SubSecTimeDigitized",
        33434 : "ExposureTime",
        33437 : "FNumber",
        34850 : "ExposureProgram",
        34852 : "SpectralSensitivity",
        34855 : "PhotographicSensitivity",
        34856 : "OECF",
        34864 : "SensitivityType",
        34865 : "StandardOutputSensitivity",
        34866 : "RecommendedExposureIndex",
        34867 : "ISOSpeed",
        34868 : "ISOSpeedLatitudeyyy",
        34869 : "ISOSpeedLatitudezzz",
        37377 : "ShutterSpeedValue",
        37378 : "ApertureValue",
        37379 : "BrightnessValue",
        37380 : "ExposureBias",
        37381 : "MaxApertureValue",
        37382 : "SubjectDistance",
        37383 : "MeteringMode",
        37384 : "LightSource",
        37385 : "Flash",
        37396 : "SubjectArea",
        37386 : "FocalLength",
        41483 : "FlashEnergy",
        41484 : "SpatialFrequencyResponse",
        41486 : "FocalPlaneXResolution",
        41487 : "FocalPlaneYResolution",
        41488 : "FocalPlaneResolutionUnit",
        41492 : "SubjectLocation",
        41493 : "ExposureIndex",
        41495 : "SensingMethod",
        41728 : "FileSource",
        41729 : "SceneType",
        41730 : "CFAPattern",
        41985 : "CustomRendered",
        41986 : "ExposureMode",
        41987 : "WhiteBalance",
        41988 : "DigitalZoomRatio",
        41989 : "FocalLengthIn35mmFilm",
        41990 : "SceneCaptureType",
        41991 : "GainControl",
        41992 : "Contrast",
        41993 : "Saturation",
        41994 : "Sharpness",
        41995 : "DeviceSettingDescription",
        41996 : "SubjectDistanceRange",
        42016 : "ImageUniqueID",
        42032 : "CameraOwnerName",
        42033 : "BodySerialNumber",
        42034 : "LensSpecification",
        42035 : "LensMake",
        42036 : "LensModel",
        42037 : "LensSerialNumber",
        0 : "GPSVersionID",
        1 : "GPSLatitudeRef",
        2 : "GPSLatitude",
        3 : "GPSLongitudeRef",
        4 : "GPSLongitude",
        5 : "GPSAltitudeRef",
        6 : "GPSAltitude",
        7 : "GPSTimeStamp",
        8 : "GPSSatellites",
        9 : "GPSStatus",
        10 : "GPSMeasureMode",
        11 : "GPSDOP",
        12 : "GPSSpeedRef",
        13 : "GPSSpeed",
        14 : "GPSTrackRef",
        15 : "GPSTrack",
        16 : "GPSImgDirectionRef",
        17 : "GPSImgDirection",
        18 : "GPSMapDatum",
        19 : "GPSDestLatitudeRef",
        20 : "GPSDestLatitude",
        21 : "GPSDestLongitudeRef",
        22 : "GPSDestLongitude",
        23 : "GPSDestBearingRef",
        24 : "GPSDestBearing",
        25 : "GPSDestDistanceRef",
        26 : "GPSDestDistance",
        27 : "GPSProcessingMethod",
        28 : "GPSAreaInformation",
        29 : "GPSDateStamp",
        30 : "GPSDifferential",
        31 : "GPSHPositioningError"
    },
    a.ExifMap.prototype.stringValues = {
        ExposureProgram: {
            0 : "Undefined",
            1 : "Manual",
            2 : "Normal program",
            3 : "Aperture priority",
            4 : "Shutter priority",
            5 : "Creative program",
            6 : "Action program",
            7 : "Portrait mode",
            8 : "Landscape mode"
        },
        MeteringMode: {
            0 : "Unknown",
            1 : "Average",
            2 : "CenterWeightedAverage",
            3 : "Spot",
            4 : "MultiSpot",
            5 : "Pattern",
            6 : "Partial",
            255 : "Other"
        },
        LightSource: {
            0 : "Unknown",
            1 : "Daylight",
            2 : "Fluorescent",
            3 : "Tungsten (incandescent light)",
            4 : "Flash",
            9 : "Fine weather",
            10 : "Cloudy weather",
            11 : "Shade",
            12 : "Daylight fluorescent (D 5700 - 7100K)",
            13 : "Day white fluorescent (N 4600 - 5400K)",
            14 : "Cool white fluorescent (W 3900 - 4500K)",
            15 : "White fluorescent (WW 3200 - 3700K)",
            17 : "Standard light A",
            18 : "Standard light B",
            19 : "Standard light C",
            20 : "D55",
            21 : "D65",
            22 : "D75",
            23 : "D50",
            24 : "ISO studio tungsten",
            255 : "Other"
        },
        Flash: {
            0 : "Flash did not fire",
            1 : "Flash fired",
            5 : "Strobe return light not detected",
            7 : "Strobe return light detected",
            9 : "Flash fired, compulsory flash mode",
            13 : "Flash fired, compulsory flash mode, return light not detected",
            15 : "Flash fired, compulsory flash mode, return light detected",
            16 : "Flash did not fire, compulsory flash mode",
            24 : "Flash did not fire, auto mode",
            25 : "Flash fired, auto mode",
            29 : "Flash fired, auto mode, return light not detected",
            31 : "Flash fired, auto mode, return light detected",
            32 : "No flash function",
            65 : "Flash fired, red-eye reduction mode",
            69 : "Flash fired, red-eye reduction mode, return light not detected",
            71 : "Flash fired, red-eye reduction mode, return light detected",
            73 : "Flash fired, compulsory flash mode, red-eye reduction mode",
            77 : "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",
            79 : "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",
            89 : "Flash fired, auto mode, red-eye reduction mode",
            93 : "Flash fired, auto mode, return light not detected, red-eye reduction mode",
            95 : "Flash fired, auto mode, return light detected, red-eye reduction mode"
        },
        SensingMethod: {
            1 : "Undefined",
            2 : "One-chip color area sensor",
            3 : "Two-chip color area sensor",
            4 : "Three-chip color area sensor",
            5 : "Color sequential area sensor",
            7 : "Trilinear sensor",
            8 : "Color sequential linear sensor"
        },
        SceneCaptureType: {
            0 : "Standard",
            1 : "Landscape",
            2 : "Portrait",
            3 : "Night scene"
        },
        SceneType: {
            1 : "Directly photographed"
        },
        CustomRendered: {
            0 : "Normal process",
            1 : "Custom process"
        },
        WhiteBalance: {
            0 : "Auto white balance",
            1 : "Manual white balance"
        },
        GainControl: {
            0 : "None",
            1 : "Low gain up",
            2 : "High gain up",
            3 : "Low gain down",
            4 : "High gain down"
        },
        Contrast: {
            0 : "Normal",
            1 : "Soft",
            2 : "Hard"
        },
        Saturation: {
            0 : "Normal",
            1 : "Low saturation",
            2 : "High saturation"
        },
        Sharpness: {
            0 : "Normal",
            1 : "Soft",
            2 : "Hard"
        },
        SubjectDistanceRange: {
            0 : "Unknown",
            1 : "Macro",
            2 : "Close view",
            3 : "Distant view"
        },
        FileSource: {
            3 : "DSC"
        },
        ComponentsConfiguration: {
            0 : "",
            1 : "Y",
            2 : "Cb",
            3 : "Cr",
            4 : "R",
            5 : "G",
            6 : "B"
        },
        Orientation: {
            1 : "top-left",
            2 : "top-right",
            3 : "bottom-right",
            4 : "bottom-left",
            5 : "left-top",
            6 : "right-top",
            7 : "right-bottom",
            8 : "left-bottom"
        }
    },
    a.ExifMap.prototype.getText = function(a) {
        var b = this.get(a);
        switch (a) {
        case "LightSource":
        case "Flash":
        case "MeteringMode":
        case "ExposureProgram":
        case "SensingMethod":
        case "SceneCaptureType":
        case "SceneType":
        case "CustomRendered":
        case "WhiteBalance":
        case "GainControl":
        case "Contrast":
        case "Saturation":
        case "Sharpness":
        case "SubjectDistanceRange":
        case "FileSource":
        case "Orientation":
            return this.stringValues[a][b];
        case "ExifVersion":
        case "FlashpixVersion":
            if (!b) return;
            return String.fromCharCode(b[0], b[1], b[2], b[3]);
        case "ComponentsConfiguration":
            if (!b) return;
            return this.stringValues[a][b[0]] + this.stringValues[a][b[1]] + this.stringValues[a][b[2]] + this.stringValues[a][b[3]];
        case "GPSVersionID":
            if (!b) return;
            return b[0] + "." + b[1] + "." + b[2] + "." + b[3]
        }
        return String(b)
    },
    function(a) {
        var b, c = a.tags,
        d = a.map;
        for (b in c) c.hasOwnProperty(b) && (d[c[b]] = b)
    } (a.ExifMap.prototype),
    a.ExifMap.prototype.getAll = function() {
        var a, b, c = {};
        for (a in this) this.hasOwnProperty(a) && (b = this.tags[a], b && (c[b] = this.getText(b)));
        return c
    }
}),
function(a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["./load-image", "./load-image-scale", "./load-image-meta"], a) : "object" == typeof module && module.exports ? a(require("./load-image"), require("./load-image-scale"), require("./load-image-meta")) : a(window.loadImage)
} (function(a) {
    "use strict";
    var b = a.hasCanvasOption,
    c = a.hasMetaOption,
    d = a.transformCoordinates,
    e = a.getTransformedOptions;
    a.hasCanvasOption = function(c) {
        return !! c.orientation || b.call(a, c)
    },
    a.hasMetaOption = function(b) {
        return b && b.orientation === !0 || c.call(a, b)
    },
    a.transformCoordinates = function(b, c) {
        d.call(a, b, c);
        var e = b.getContext("2d"),
        f = b.width,
        g = b.height,
        h = b.style.width,
        i = b.style.height,
        j = c.orientation;
        if (j && !(j > 8)) switch (j > 4 && (b.width = g, b.height = f, b.style.width = i, b.style.height = h), j) {
        case 2:
            e.translate(f, 0),
            e.scale( - 1, 1);
            break;
        case 3:
            e.translate(f, g),
            e.rotate(Math.PI);
            break;
        case 4:
            e.translate(0, g),
            e.scale(1, -1);
            break;
        case 5:
            e.rotate(.5 * Math.PI),
            e.scale(1, -1);
            break;
        case 6:
            e.rotate(.5 * Math.PI),
            e.translate(0, -g);
            break;
        case 7:
            e.rotate(.5 * Math.PI),
            e.translate(f, -g),
            e.scale( - 1, 1);
            break;
        case 8:
            e.rotate( - .5 * Math.PI),
            e.translate( - f, 0)
        }
    },
    a.getTransformedOptions = function(b, c, d) {
        var f, g, h = e.call(a, b, c),
        i = h.orientation;
        if (i === !0 && d && d.exif && (i = d.exif.get("Orientation")), !i || i > 8 || 1 === i) return h;
        f = {};
        for (g in h) h.hasOwnProperty(g) && (f[g] = h[g]);
        switch (f.orientation = i, i) {
        case 2:
            f.left = h.right,
            f.right = h.left;
            break;
        case 3:
            f.left = h.right,
            f.top = h.bottom,
            f.right = h.left,
            f.bottom = h.top;
            break;
        case 4:
            f.top = h.bottom,
            f.bottom = h.top;
            break;
        case 5:
            f.left = h.top,
            f.top = h.left,
            f.right = h.bottom,
            f.bottom = h.right;
            break;
        case 6:
            f.left = h.top,
            f.top = h.right,
            f.right = h.bottom,
            f.bottom = h.left;
            break;
        case 7:
            f.left = h.bottom,
            f.top = h.right,
            f.right = h.top,
            f.bottom = h.left;
            break;
        case 8:
            f.left = h.bottom,
            f.top = h.left,
            f.right = h.top,
            f.bottom = h.right
        }
        return f.orientation > 4 && (f.maxWidth = h.maxHeight, f.maxHeight = h.maxWidth, f.minWidth = h.minHeight, f.minHeight = h.minWidth, f.sourceWidth = h.sourceHeight, f.sourceHeight = h.sourceWidth),
        f
    }
}),
function(a) {
    "use strict";
    var b = a.HTMLCanvasElement && a.HTMLCanvasElement.prototype,
    c = a.Blob &&
    function() {
        try {
            return Boolean(new Blob)
        } catch(a) {
            return ! 1
        }
    } (),
    d = c && a.Uint8Array &&
    function() {
        try {
            return 100 === new Blob([new Uint8Array(100)]).size
        } catch(a) {
            return ! 1
        }
    } (),
    e = a.BlobBuilder || a.WebKitBlobBuilder || a.MozBlobBuilder || a.MSBlobBuilder,
    f = /^data:((.*?)(;charset=.*?)?)(;base64)?,/,
    g = (c || e) && a.atob && a.ArrayBuffer && a.Uint8Array &&
    function(a) {
        var b, g, h, i, j, k, l, m, n;
        if (b = a.match(f), !b) throw new Error("invalid data URI");
        for (g = b[2] ? b[1] : "text/plain" + (b[3] || ";charset=US-ASCII"), h = !!b[4], i = a.slice(b[0].length), j = h ? atob(i) : decodeURIComponent(i), k = new ArrayBuffer(j.length), l = new Uint8Array(k), m = 0; m < j.length; m += 1) l[m] = j.charCodeAt(m);
        return c ? new Blob([d ? l: k], {
            type: g
        }) : (n = new e, n.append(k), n.getBlob(g))
    };
    a.HTMLCanvasElement && !b.toBlob && (b.mozGetAsFile ? b.toBlob = function(a, c, d) {
        a(d && b.toDataURL && g ? g(this.toDataURL(c, d)) : this.mozGetAsFile("blob", c))
    }: b.toDataURL && g && (b.toBlob = function(a, b, c) {
        a(g(this.toDataURL(b, c)))
    })),
    "function" == typeof define && define.amd ? define(function() {
        return g
    }) : "object" == typeof module && module.exports ? module.exports = g: a.dataURLtoBlob = g
} (window),
function(a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery", "jquery.ui.widget"], a) : a(window.jQuery)
} (function(a) {
    "use strict";
    a.support.fileInput = !(new RegExp("(Android (1\\.[0156]|2\\.[01]))|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)|(w(eb)?OSBrowser)|(webOS)|(Kindle/(1\\.0|2\\.[05]|3\\.0))").test(window.navigator.userAgent) || a('<input type="file">').prop("disabled")),
    a.support.xhrFileUpload = !(!window.ProgressEvent || !window.FileReader),
    a.support.xhrFormDataFileUpload = !!window.FormData,
    a.support.blobSlice = window.Blob && (Blob.prototype.slice || Blob.prototype.webkitSlice || Blob.prototype.mozSlice),
    a.widget("blueimp.fileupload", {
        options: {
            dropZone: a(document),
            pasteZone: a(document),
            fileInput: void 0,
            replaceFileInput: !0,
            paramName: void 0,
            singleFileUploads: !0,
            limitMultiFileUploads: void 0,
            sequentialUploads: !1,
            limitConcurrentUploads: void 0,
            forceIframeTransport: !1,
            redirect: void 0,
            redirectParamName: void 0,
            postMessage: void 0,
            multipart: !0,
            maxChunkSize: void 0,
            uploadedBytes: void 0,
            recalculateProgress: !0,
            progressInterval: 100,
            bitrateInterval: 500,
            autoUpload: !0,
            messages: {
                uploadedBytes: "Uploaded bytes exceed file size"
            },
            i18n: function(b, c) {
                return b = this.messages[b] || b.toString(),
                c && a.each(c,
                function(a, c) {
                    b = b.replace("{" + a + "}", c)
                }),
                b
            },
            formData: function(a) {
                return a.serializeArray()
            },
            add: function(b, c) {
                return b.isDefaultPrevented() ? !1 : void((c.autoUpload || c.autoUpload !== !1 && a(this).fileupload("option", "autoUpload")) && c.process().done(function() {
                    c.submit()
                }))
            },
            processData: !1,
            contentType: !1,
            cache: !1
        },
        _specialOptions: ["fileInput", "dropZone", "pasteZone", "multipart", "forceIframeTransport"],
        _blobSlice: a.support.blobSlice &&
        function() {
            var a = this.slice || this.webkitSlice || this.mozSlice;
            return a.apply(this, arguments)
        },
        _BitrateTimer: function() {
            this.timestamp = Date.now ? Date.now() : (new Date).getTime(),
            this.loaded = 0,
            this.bitrate = 0,
            this.getBitrate = function(a, b, c) {
                var d = a - this.timestamp;
                return (!this.bitrate || !c || d > c) && (this.bitrate = (b - this.loaded) * (1e3 / d) * 8, this.loaded = b, this.timestamp = a),
                this.bitrate
            }
        },
        _isXHRUpload: function(b) {
            return ! b.forceIframeTransport && (!b.multipart && a.support.xhrFileUpload || a.support.xhrFormDataFileUpload)
        },
        _getFormData: function(b) {
            var c;
            return "function" == typeof b.formData ? b.formData(b.form) : a.isArray(b.formData) ? b.formData: "object" === a.type(b.formData) ? (c = [], a.each(b.formData,
            function(a, b) {
                c.push({
                    name: a,
                    value: b
                })
            }), c) : []
        },
        _getTotal: function(b) {
            var c = 0;
            return a.each(b,
            function(a, b) {
                c += b.size || 1
            }),
            c
        },
        _initProgressObject: function(b) {
            var c = {
                loaded: 0,
                total: 0,
                bitrate: 0
            };
            b._progress ? a.extend(b._progress, c) : b._progress = c
        },
        _initResponseObject: function(a) {
            var b;
            if (a._response) for (b in a._response) a._response.hasOwnProperty(b) && delete a._response[b];
            else a._response = {}
        },
        _onProgress: function(b, c) {
            if (b.lengthComputable) {
                var d, e = Date.now ? Date.now() : (new Date).getTime();
                if (c._time && c.progressInterval && e - c._time < c.progressInterval && b.loaded !== b.total) return;
                c._time = e,
                d = Math.floor(b.loaded / b.total * (c.chunkSize || c._progress.total)) + (c.uploadedBytes || 0),
                this._progress.loaded += d - c._progress.loaded,
                this._progress.bitrate = this._bitrateTimer.getBitrate(e, this._progress.loaded, c.bitrateInterval),
                c._progress.loaded = c.loaded = d,
                c._progress.bitrate = c.bitrate = c._bitrateTimer.getBitrate(e, d, c.bitrateInterval),
                this._trigger("progress", a.Event("progress", {
                    delegatedEvent: b
                }), c),
                this._trigger("progressall", a.Event("progressall", {
                    delegatedEvent: b
                }), this._progress)
            }
        },
        _initProgressListener: function(b) {
            var c = this,
            d = b.xhr ? b.xhr() : a.ajaxSettings.xhr();
            d.upload && (a(d.upload).bind("progress",
            function(a) {
                var d = a.originalEvent;
                a.lengthComputable = d.lengthComputable,
                a.loaded = d.loaded,
                a.total = d.total,
                c._onProgress(a, b)
            }), b.xhr = function() {
                return d
            })
        },
        _isInstanceOf: function(a, b) {
            return Object.prototype.toString.call(b) === "[object " + a + "]"
        },
        _initXHRData: function(b) {
            var c, d = this,
            e = b.files[0],
            f = b.multipart || !a.support.xhrFileUpload,
            g = b.paramName[0];
            b.headers = a.extend({},
            b.headers),
            b.contentRange && (b.headers["Content-Range"] = b.contentRange),
            f && !b.blob && this._isInstanceOf("File", e) || (b.headers["Content-Disposition"] = 'attachment; filename="' + encodeURI(e.name) + '"'),
            f ? a.support.xhrFormDataFileUpload && (b.postMessage ? (c = this._getFormData(b), b.blob ? c.push({
                name: g,
                value: b.blob
            }) : a.each(b.files,
            function(a, d) {
                c.push({
                    name: b.paramName[a] || g,
                    value: d
                })
            })) : (d._isInstanceOf("FormData", b.formData) ? c = b.formData: (c = new FormData, a.each(this._getFormData(b),
            function(a, b) {
                c.append(b.name, b.value)
            })), b.blob ? c.append(g, b.blob, e.name) : a.each(b.files,
            function(a, e) { (d._isInstanceOf("File", e) || d._isInstanceOf("Blob", e)) && c.append(b.paramName[a] || g, e, e.uploadName || e.name)
            })), b.data = c) : (b.contentType = e.type, b.data = b.blob || e),
            b.blob = null
        },
        _initIframeSettings: function(b) {
            var c = a("<a></a>").prop("href", b.url).prop("host");
            b.dataType = "iframe " + (b.dataType || ""),
            b.formData = this._getFormData(b),
            b.redirect && c && c !== location.host && b.formData.push({
                name: b.redirectParamName || "redirect",
                value: b.redirect
            })
        },
        _initDataSettings: function(a) {
            this._isXHRUpload(a) ? (this._chunkedUpload(a, !0) || (a.data || this._initXHRData(a), this._initProgressListener(a)), a.postMessage && (a.dataType = "postmessage " + (a.dataType || ""))) : this._initIframeSettings(a)
        },
        _getParamName: function(b) {
            var c = a(b.fileInput),
            d = b.paramName;
            return d ? a.isArray(d) || (d = [d]) : (d = [], c.each(function() {
                for (var b = a(this), c = b.prop("name") || "files[]", e = (b.prop("files") || [1]).length; e;) d.push(c),
                e -= 1
            }), d.length || (d = [c.prop("name") || "files[]"])),
            d
        },
        _initFormSettings: function(b) {
            b.form && b.form.length || (b.form = a(b.fileInput.prop("form")), b.form.length || (b.form = a(this.options.fileInput.prop("form")))),
            b.paramName = this._getParamName(b),
            b.url || (b.url = b.form.prop("action") || location.href),
            b.type = (b.type || "string" === a.type(b.form.prop("method")) && b.form.prop("method") || "").toUpperCase(),
            "POST" !== b.type && "PUT" !== b.type && "PATCH" !== b.type && (b.type = "POST"),
            b.formAcceptCharset || (b.formAcceptCharset = b.form.attr("accept-charset"))
        },
        _getAJAXSettings: function(b) {
            var c = a.extend({},
            this.options, b);
            return this._initFormSettings(c),
            this._initDataSettings(c),
            c
        },
        _getDeferredState: function(a) {
            return a.state ? a.state() : a.isResolved() ? "resolved": a.isRejected() ? "rejected": "pending"
        },
        _enhancePromise: function(a) {
            return a.success = a.done,
            a.error = a.fail,
            a.complete = a.always,
            a
        },
        _getXHRPromise: function(b, c, d) {
            var e = a.Deferred(),
            f = e.promise();
            return c = c || this.options.context || f,
            b === !0 ? e.resolveWith(c, d) : b === !1 && e.rejectWith(c, d),
            f.abort = e.promise,
            this._enhancePromise(f)
        },
        _addConvenienceMethods: function(b, c) {
            var d = this,
            e = function(b) {
                return a.Deferred().resolveWith(d, b).promise()
            };
            c.process = function(b, f) {
                return (b || f) && (c._processQueue = this._processQueue = (this._processQueue || e([this])).pipe(function() {
                    return c.errorThrown ? a.Deferred().rejectWith(d, [c]).promise() : e(arguments)
                }).pipe(b, f)),
                this._processQueue || e([this])
            },
            c.submit = function() {
                return "pending" !== this.state() && (c.jqXHR = this.jqXHR = d._trigger("submit", a.Event("submit", {
                    delegatedEvent: b
                }), this) !== !1 && d._onSend(b, this)),
                this.jqXHR || d._getXHRPromise()
            },
            c.abort = function() {
                return this.jqXHR ? this.jqXHR.abort() : (this.errorThrown = "abort", d._getXHRPromise())
            },
            c.state = function() {
                return this.jqXHR ? d._getDeferredState(this.jqXHR) : this._processQueue ? d._getDeferredState(this._processQueue) : void 0
            },
            c.processing = function() {
                return ! this.jqXHR && this._processQueue && "pending" === d._getDeferredState(this._processQueue)
            },
            c.progress = function() {
                return this._progress
            },
            c.response = function() {
                return this._response
            }
        },
        _getUploadedBytes: function(a) {
            var b = a.getResponseHeader("Range"),
            c = b && b.split("-"),
            d = c && c.length > 1 && parseInt(c[1], 10);
            return d && d + 1
        },
        _chunkedUpload: function(b, c) {
            b.uploadedBytes = b.uploadedBytes || 0;
            var d, e, f = this,
            g = b.files[0],
            h = g.size,
            i = b.uploadedBytes,
            j = b.maxChunkSize || h,
            k = this._blobSlice,
            l = a.Deferred(),
            m = l.promise();
            return this._isXHRUpload(b) && k && (i || h > j) && !b.data ? c ? !0 : i >= h ? (g.error = b.i18n("uploadedBytes"), this._getXHRPromise(!1, b.context, [null, "error", g.error])) : (e = function() {
                var c = a.extend({},
                b),
                m = c._progress.loaded;
                c.blob = k.call(g, i, i + j, g.type),
                c.chunkSize = c.blob.size,
                c.contentRange = "bytes " + i + "-" + (i + c.chunkSize - 1) + "/" + h,
                f._initXHRData(c),
                f._initProgressListener(c),
                d = (f._trigger("chunksend", null, c) !== !1 && a.ajax(c) || f._getXHRPromise(!1, c.context)).done(function(d, g, j) {
                    i = f._getUploadedBytes(j) || i + c.chunkSize,
                    m + c.chunkSize - c._progress.loaded && f._onProgress(a.Event("progress", {
                        lengthComputable: !0,
                        loaded: i - c.uploadedBytes,
                        total: i - c.uploadedBytes
                    }), c),
                    b.uploadedBytes = c.uploadedBytes = i,
                    c.result = d,
                    c.textStatus = g,
                    c.jqXHR = j,
                    f._trigger("chunkdone", null, c),
                    f._trigger("chunkalways", null, c),
                    h > i ? e() : l.resolveWith(c.context, [d, g, j])
                }).fail(function(a, b, d) {
                    c.jqXHR = a,
                    c.textStatus = b,
                    c.errorThrown = d,
                    f._trigger("chunkfail", null, c),
                    f._trigger("chunkalways", null, c),
                    l.rejectWith(c.context, [a, b, d])
                })
            },
            this._enhancePromise(m), m.abort = function() {
                return d.abort()
            },
            e(), m) : !1
        },
        _beforeSend: function(a, b) {
            0 === this._active && (this._trigger("start"), this._bitrateTimer = new this._BitrateTimer, this._progress.loaded = this._progress.total = 0, this._progress.bitrate = 0),
            this._initResponseObject(b),
            this._initProgressObject(b),
            b._progress.loaded = b.loaded = b.uploadedBytes || 0,
            b._progress.total = b.total = this._getTotal(b.files) || 1,
            b._progress.bitrate = b.bitrate = 0,
            this._active += 1,
            this._progress.loaded += b.loaded,
            this._progress.total += b.total
        },
        _onDone: function(b, c, d, e) {
            var f = e._progress.total,
            g = e._response;
            e._progress.loaded < f && this._onProgress(a.Event("progress", {
                lengthComputable: !0,
                loaded: f,
                total: f
            }), e),
            g.result = e.result = b,
            g.textStatus = e.textStatus = c,
            g.jqXHR = e.jqXHR = d,
            this._trigger("done", null, e)
        },
        _onFail: function(a, b, c, d) {
            var e = d._response;
            d.recalculateProgress && (this._progress.loaded -= d._progress.loaded, this._progress.total -= d._progress.total),
            e.jqXHR = d.jqXHR = a,
            e.textStatus = d.textStatus = b,
            e.errorThrown = d.errorThrown = c,
            this._trigger("fail", null, d)
        },
        _onAlways: function(a, b, c, d) {
            this._trigger("always", null, d)
        },
        _onSend: function(b, c) {
            c.submit || this._addConvenienceMethods(b, c);
            var d, e, f, g, h = this,
            i = h._getAJAXSettings(c),
            j = function() {
                return h._sending += 1,
                i._bitrateTimer = new h._BitrateTimer,
                d = d || ((e || h._trigger("send", a.Event("send", {
                    delegatedEvent: b
                }), i) === !1) && h._getXHRPromise(!1, i.context, e) || h._chunkedUpload(i) || a.ajax(i)).done(function(a, b, c) {
                    h._onDone(a, b, c, i)
                }).fail(function(a, b, c) {
                    h._onFail(a, b, c, i)
                }).always(function(a, b, c) {
                    if (h._onAlways(a, b, c, i), h._sending -= 1, h._active -= 1, i.limitConcurrentUploads && i.limitConcurrentUploads > h._sending) for (var d = h._slots.shift(); d;) {
                        if ("pending" === h._getDeferredState(d)) {
                            d.resolve();
                            break
                        }
                        d = h._slots.shift()
                    }
                    0 === h._active && h._trigger("stop")
                })
            };
            return this._beforeSend(b, i),
            this.options.sequentialUploads || this.options.limitConcurrentUploads && this.options.limitConcurrentUploads <= this._sending ? (this.options.limitConcurrentUploads > 1 ? (f = a.Deferred(), this._slots.push(f), g = f.pipe(j)) : (this._sequence = this._sequence.pipe(j, j), g = this._sequence), g.abort = function() {
                return e = [void 0, "abort", "abort"],
                d ? d.abort() : (f && f.rejectWith(i.context, e), j())
            },
            this._enhancePromise(g)) : j()
        },
        _onAdd: function(b, c) {
            var d, e, f, g, h = this,
            i = !0,
            j = a.extend({},
            this.options, c),
            k = j.limitMultiFileUploads,
            l = this._getParamName(j);
            if ((j.singleFileUploads || k) && this._isXHRUpload(j)) if (!j.singleFileUploads && k) for (f = [], d = [], g = 0; g < c.files.length; g += k) f.push(c.files.slice(g, g + k)),
            e = l.slice(g, g + k),
            e.length || (e = l),
            d.push(e);
            else d = l;
            else f = [c.files],
            d = [l];
            return c.originalFiles = c.files,
            a.each(f || c.files,
            function(e, g) {
                var j = a.extend({},
                c);
                return j.files = f ? g: [g],
                j.paramName = d[e],
                h._initResponseObject(j),
                h._initProgressObject(j),
                h._addConvenienceMethods(b, j),
                i = h._trigger("add", a.Event("add", {
                    delegatedEvent: b
                }), j)
            }),
            i
        },
        _replaceFileInput: function(b) {
            var c = b.clone(!0);
            a("<form></form>").append(c)[0].reset(),
            b.after(c).detach(),
            a.cleanData(b.unbind("remove")),
            this.options.fileInput = this.options.fileInput.map(function(a, d) {
                return d === b[0] ? c[0] : d
            }),
            b[0] === this.element[0] && (this.element = c)
        },
        _handleFileTreeEntry: function(b, c) {
            var d, e = this,
            f = a.Deferred(),
            g = function(a) {
                a && !a.entry && (a.entry = b),
                f.resolve([a])
            };
            return c = c || "",
            b.isFile ? b._file ? (b._file.relativePath = c, f.resolve(b._file)) : b.file(function(a) {
                a.relativePath = c,
                f.resolve(a)
            },
            g) : b.isDirectory ? (d = b.createReader(), d.readEntries(function(a) {
                e._handleFileTreeEntries(a, c + b.name + "/").done(function(a) {
                    f.resolve(a)
                }).fail(g)
            },
            g)) : f.resolve([]),
            f.promise()
        },
        _handleFileTreeEntries: function(b, c) {
            var d = this;
            return a.when.apply(a, a.map(b,
            function(a) {
                return d._handleFileTreeEntry(a, c)
            })).pipe(function() {
                return Array.prototype.concat.apply([], arguments)
            })
        },
        _getDroppedFiles: function(b) {
            b = b || {};
            var c = b.items;
            return c && c.length && (c[0].webkitGetAsEntry || c[0].getAsEntry) ? this._handleFileTreeEntries(a.map(c,
            function(a) {
                var b;
                return a.webkitGetAsEntry ? (b = a.webkitGetAsEntry(), b && (b._file = a.getAsFile()), b) : a.getAsEntry()
            })) : a.Deferred().resolve(a.makeArray(b.files)).promise()
        },
        _getSingleFileInputFiles: function(b) {
            b = a(b);
            var c, d, e = b.prop("webkitEntries") || b.prop("entries");
            if (e && e.length) return this._handleFileTreeEntries(e);
            if (c = a.makeArray(b.prop("files")), c.length) void 0 === c[0].name && c[0].fileName && a.each(c,
            function(a, b) {
                b.name = b.fileName,
                b.size = b.fileSize
            });
            else {
                if (d = b.prop("value"), !d) return a.Deferred().resolve([]).promise();
                c = [{
                    name: d.replace(/^.*\\/, "")
                }]
            }
            return a.Deferred().resolve(c).promise()
        },
        _getFileInputFiles: function(b) {
            return b instanceof a && 1 !== b.length ? a.when.apply(a, a.map(b, this._getSingleFileInputFiles)).pipe(function() {
                return Array.prototype.concat.apply([], arguments)
            }) : this._getSingleFileInputFiles(b)
        },
        _onChange: function(b) {
            var c = this,
            d = {
                fileInput: a(b.target),
                form: a(b.target.form)
            };
            this._getFileInputFiles(d.fileInput).always(function(e) {
                d.files = e,
                c.options.replaceFileInput && c._replaceFileInput(d.fileInput),
                c._trigger("change", a.Event("change", {
                    delegatedEvent: b
                }), d) !== !1 && c._onAdd(b, d)
            })
        },
        _onPaste: function(b) {
            var c = b.originalEvent && b.originalEvent.clipboardData && b.originalEvent.clipboardData.items,
            d = {
                files: []
            };
            c && c.length && (a.each(c,
            function(a, b) {
                var c = b.getAsFile && b.getAsFile();
                c && d.files.push(c)
            }), this._trigger("paste", a.Event("paste", {
                delegatedEvent: b
            }), d) !== !1 && this._onAdd(b, d))
        },
        _onDrop: function(b) {
            b.dataTransfer = b.originalEvent && b.originalEvent.dataTransfer;
            var c = this,
            d = b.dataTransfer,
            e = {};
            d && d.files && d.files.length && (b.preventDefault(), this._getDroppedFiles(d).always(function(d) {
                e.files = d,
                c._trigger("drop", a.Event("drop", {
                    delegatedEvent: b
                }), e) !== !1 && c._onAdd(b, e)
            }))
        },
        _onDragOver: function(b) {
            b.dataTransfer = b.originalEvent && b.originalEvent.dataTransfer;
            var c = b.dataTransfer;
            c && -1 !== a.inArray("Files", c.types) && this._trigger("dragover", a.Event("dragover", {
                delegatedEvent: b
            })) !== !1 && (b.preventDefault(), c.dropEffect = "copy")
        },
        _initEventHandlers: function() {
            this._isXHRUpload(this.options) && (this._on(this.options.dropZone, {
                dragover: this._onDragOver,
                drop: this._onDrop
            }), this._on(this.options.pasteZone, {
                paste: this._onPaste
            })),
            a.support.fileInput && this._on(this.options.fileInput, {
                change: this._onChange
            })
        },
        _destroyEventHandlers: function() {
            this._off(this.options.dropZone, "dragover drop"),
            this._off(this.options.pasteZone, "paste"),
            this._off(this.options.fileInput, "change")
        },
        _setOption: function(b, c) {
            var d = -1 !== a.inArray(b, this._specialOptions);
            d && this._destroyEventHandlers(),
            this._super(b, c),
            d && (this._initSpecialOptions(), this._initEventHandlers())
        },
        _initSpecialOptions: function() {
            var b = this.options;
            void 0 === b.fileInput ? b.fileInput = this.element.is('input[type="file"]') ? this.element: this.element.find('input[type="file"]') : b.fileInput instanceof a || (b.fileInput = a(b.fileInput)),
            b.dropZone instanceof a || (b.dropZone = a(b.dropZone)),
            b.pasteZone instanceof a || (b.pasteZone = a(b.pasteZone))
        },
        _getRegExp: function(a) {
            var b = a.split("/"),
            c = b.pop();
            return b.shift(),
            new RegExp(b.join("/"), c)
        },
        _isRegExpOption: function(b, c) {
            return "url" !== b && "string" === a.type(c) && /^\/.*\/[igm]{0,3}$/.test(c)
        },
        _initDataAttributes: function() {
            var b = this,
            c = this.options;
            a.each(a(this.element[0].cloneNode(!1)).data(),
            function(a, d) {
                b._isRegExpOption(a, d) && (d = b._getRegExp(d)),
                c[a] = d
            })
        },
        _create: function() {
            this._initDataAttributes(),
            this._initSpecialOptions(),
            this._slots = [],
            this._sequence = this._getXHRPromise(!0),
            this._sending = this._active = 0,
            this._initProgressObject(this),
            this._initEventHandlers()
        },
        active: function() {
            return this._active
        },
        progress: function() {
            return this._progress
        },
        add: function(b) {
            var c = this;
            b && !this.options.disabled && (b.fileInput && !b.files ? this._getFileInputFiles(b.fileInput).always(function(a) {
                b.files = a,
                c._onAdd(null, b)
            }) : (b.files = a.makeArray(b.files), this._onAdd(null, b)))
        },
        send: function(b) {
            if (b && !this.options.disabled) {
                if (b.fileInput && !b.files) {
                    var c, d, e = this,
                    f = a.Deferred(),
                    g = f.promise();
                    return g.abort = function() {
                        return d = !0,
                        c ? c.abort() : (f.reject(null, "abort", "abort"), g)
                    },
                    this._getFileInputFiles(b.fileInput).always(function(a) {
                        if (!d) {
                            if (!a.length) return void f.reject();
                            b.files = a,
                            c = e._onSend(null, b).then(function(a, b, c) {
                                f.resolve(a, b, c)
                            },
                            function(a, b, c) {
                                f.reject(a, b, c)
                            })
                        }
                    }),
                    this._enhancePromise(g)
                }
                if (b.files = a.makeArray(b.files), b.files.length) return this._onSend(null, b)
            }
            return this._getXHRPromise(!1, b && b.context)
        }
    })
}),
function(a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery", "./jquery.fileupload"], a) : a(window.jQuery)
} (function(a) {
    "use strict";
    var b = a.blueimp.fileupload.prototype.options.add;
    a.widget("blueimp.fileupload", a.blueimp.fileupload, {
        options: {
            processQueue: [],
            add: function(c, d) {
                var e = a(this);
                d.process(function() {
                    return e.fileupload("process", d)
                }),
                b.call(this, c, d)
            }
        },
        processActions: {},
        _processFile: function(b, c) {
            var d = this,
            e = a.Deferred().resolveWith(d, [b]),
            f = e.promise();
            return this._trigger("process", null, b),
            a.each(b.processQueue,
            function(b, e) {
                var g = function(b) {
                    return c.errorThrown ? a.Deferred().rejectWith(d, [c]).promise() : d.processActions[e.action].call(d, b, e)
                };
                f = f.pipe(g, e.always && g)
            }),
            f.done(function() {
                d._trigger("processdone", null, b),
                d._trigger("processalways", null, b)
            }).fail(function() {
                d._trigger("processfail", null, b),
                d._trigger("processalways", null, b)
            }),
            f
        },
        _transformProcessQueue: function(b) {
            var c = [];
            a.each(b.processQueue,
            function() {
                var d = {},
                e = this.action,
                f = this.prefix === !0 ? e: this.prefix;
                a.each(this,
                function(c, e) {
                    "string" === a.type(e) && "@" === e.charAt(0) ? d[c] = b[e.slice(1) || (f ? f + c.charAt(0).toUpperCase() + c.slice(1) : c)] : d[c] = e
                }),
                c.push(d)
            }),
            b.processQueue = c
        },
        processing: function() {
            return this._processing
        },
        process: function(b) {
            var c = this,
            d = a.extend({},
            this.options, b);
            return d.processQueue && d.processQueue.length && (this._transformProcessQueue(d), 0 === this._processing && this._trigger("processstart"), a.each(b.files,
            function(e) {
                var f = e ? a.extend({},
                d) : d,
                g = function() {
                    return b.errorThrown ? a.Deferred().rejectWith(c, [b]).promise() : c._processFile(f, b)
                };
                f.index = e,
                c._processing += 1,
                c._processingQueue = c._processingQueue.pipe(g, g).always(function() {
                    c._processing -= 1,
                    0 === c._processing && c._trigger("processstop")
                })
            })),
            this._processingQueue
        },
        _create: function() {
            this._super(),
            this._processing = 0,
            this._processingQueue = a.Deferred().resolveWith(this).promise()
        }
    })
}),
function(a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery", "load-image", "load-image-meta", "load-image-exif", "load-image-ios", "canvas-to-blob", "./jquery.fileupload-process"], a) : a(window.jQuery, window.loadImage)
} (function(a, b) {
    "use strict";
    a.blueimp.fileupload.prototype.options.processQueue.unshift({
        action: "loadImageMetaData",
        disableImageHead: "@",
        disableExif: "@",
        disableExifThumbnail: "@",
        disableExifSub: "@",
        disableExifGps: "@",
        disabled: "@disableImageMetaDataLoad"
    },
    {
        action: "loadImage",
        prefix: !0,
        fileTypes: "@",
        maxFileSize: "@",
        noRevoke: "@",
        disabled: "@disableImageLoad"
    },
    {
        action: "resizeImage",
        prefix: "image",
        maxWidth: "@",
        maxHeight: "@",
        minWidth: "@",
        minHeight: "@",
        crop: "@",
        orientation: "@",
        forceResize: "@",
        disabled: "@disableImageResize"
    },
    {
        action: "saveImage",
        quality: "@imageQuality",
        type: "@imageType",
        disabled: "@disableImageResize"
    },
    {
        action: "saveImageMetaData",
        disabled: "@disableImageMetaDataSave"
    },
    {
        action: "resizeImage",
        prefix: "preview",
        maxWidth: "@",
        maxHeight: "@",
        minWidth: "@",
        minHeight: "@",
        crop: "@",
        orientation: "@",
        thumbnail: "@",
        canvas: "@",
        disabled: "@disableImagePreview"
    },
    {
        action: "setImage",
        name: "@imagePreviewName",
        disabled: "@disableImagePreview"
    }),
    a.widget("blueimp.fileupload", a.blueimp.fileupload, {
        options: {
            loadImageFileTypes: /^image\/(gif|jpeg|png)$/,
            loadImageMaxFileSize: 1e7,
            imageMaxWidth: 1920,
            imageMaxHeight: 1080,
            imageOrientation: !1,
            imageCrop: !1,
            disableImageResize: !0,
            previewMaxWidth: 80,
            previewMaxHeight: 80,
            previewOrientation: !0,
            previewThumbnail: !0,
            previewCrop: !1,
            previewCanvas: !0
        },
        processActions: {
            loadImage: function(c, d) {
                if (d.disabled) return c;
                var e = this,
                f = c.files[c.index],
                g = a.Deferred();
                return "number" === a.type(d.maxFileSize) && f.size > d.maxFileSize || d.fileTypes && !d.fileTypes.test(f.type) || !b(f,
                function(a) {
                    a.src && (c.img = a),
                    g.resolveWith(e, [c])
                },
                d) ? c: g.promise()
            },
            resizeImage: function(c, d) {
                if (d.disabled || !c.canvas && !c.img) return c;
                d = a.extend({
                    canvas: !0
                },
                d);
                var e, f = this,
                g = a.Deferred(),
                h = d.canvas && c.canvas || c.img,
                i = function(a) {
                    a && (a.width !== h.width || a.height !== h.height || d.forceResize) && (c[a.getContext ? "canvas": "img"] = a),
                    c.preview = a,
                    g.resolveWith(f, [c])
                };
                return c.exif && (d.orientation === !0 && (d.orientation = c.exif.get("Orientation")), d.thumbnail && (e = c.exif.get("Thumbnail"))) ? (b(e, i, d), g.promise()) : h ? (i(b.scale(h, d)), g.promise()) : c
            },
            saveImage: function(b, c) {
                if (!b.canvas || c.disabled) return b;
                var d = this,
                e = b.files[b.index],
                f = a.Deferred();
                return b.canvas.toBlob ? (b.canvas.toBlob(function(a) {
                    a.name || (e.type === a.type ? a.name = e.name: e.name && (a.name = e.name.replace(/\..+$/, "." + a.type.substr(6)))),
                    e.type !== a.type && delete b.imageHead,
                    b.files[b.index] = a,
                    f.resolveWith(d, [b])
                },
                c.type || e.type, c.quality), f.promise()) : b
            },
            loadImageMetaData: function(c, d) {
                if (d.disabled) return c;
                var e = this,
                f = a.Deferred();
                return b.parseMetaData(c.files[c.index],
                function(b) {
                    a.extend(c, b),
                    f.resolveWith(e, [c])
                },
                d),
                f.promise()
            },
            saveImageMetaData: function(a, b) {
                if (! (a.imageHead && a.canvas && a.canvas.toBlob) || b.disabled) return a;
                var c = a.files[a.index],
                d = new Blob([a.imageHead, this._blobSlice.call(c, 20)], {
                    type: c.type
                });
                return d.name = c.name,
                a.files[a.index] = d,
                a
            },
            setImage: function(a, b) {
                return a.preview && !b.disabled && (a.files[a.index][b.name || "preview"] = a.preview),
                a
            }
        }
    })
}),
function(a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery", "./jquery.fileupload-process"], a) : a(window.jQuery)
} (function(a) {
    "use strict";
    a.blueimp.fileupload.prototype.options.processQueue.push({
        action: "validate",
        always: !0,
        acceptFileTypes: "@",
        maxFileSize: "@",
        minFileSize: "@",
        maxNumberOfFiles: "@",
        disabled: "@disableValidation"
    }),
    a.widget("blueimp.fileupload", a.blueimp.fileupload, {
        options: {
            getNumberOfFiles: a.noop,
            messages: {
                maxNumberOfFiles: "Maximum number of files exceeded",
                acceptFileTypes: "File type not allowed",
                maxFileSize: "File is too large",
                minFileSize: "File is too small"
            }
        },
        processActions: {
            validate: function(b, c) {
                if (c.disabled) return b;
                var d, e = a.Deferred(),
                f = this.options,
                g = b.files[b.index];
                return (c.minFileSize || c.maxFileSize) && (d = g.size),
                "number" === a.type(c.maxNumberOfFiles) && (f.getNumberOfFiles() || 0) + b.files.length > c.maxNumberOfFiles ? g.error = f.i18n("maxNumberOfFiles") : !c.acceptFileTypes || c.acceptFileTypes.test(g.type) || c.acceptFileTypes.test(g.name) ? d > c.maxFileSize ? g.error = f.i18n("maxFileSize") : "number" === a.type(d) && d < c.minFileSize ? g.error = f.i18n("minFileSize") : delete g.error: g.error = f.i18n("acceptFileTypes"),
                g.error || b.files.error ? (b.files.error = !0, e.rejectWith(this, [b])) : e.resolveWith(this, [b]),
                e.promise()
            }
        }
    })
}),
function(a) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery", "angular", "./jquery.fileupload-image", "./jquery.fileupload-audio", "./jquery.fileupload-video", "./jquery.fileupload-validate"], a) : a()
} (function() {
    "use strict";
    angular.module("blueimp.fileupload", []).provider("fileUpload",
    function() {
        var a, b = function() {
            var a = angular.element(this).fileupload("option", "scope")(),
            b = angular.injector(["ng"]).get("$timeout");
            b(function() {
                a.$apply()
            })
        },
        c = function(a, b) {
            var c = b.files,
            d = c[0];
            angular.forEach(c,
            function(a, c) {
                a._index = c,
                a.$state = function() {
                    return b.state()
                },
                a.$processing = function() {
                    return b.processing()
                },
                a.$progress = function() {
                    return b.progress()
                },
                a.$response = function() {
                    return b.response()
                }
            }),
            d.$submit = function() {
                return b.submit()
            },
            d.$cancel = function() {
                return a.clear(c),
                b.abort()
            }
        };
        a = this.defaults = {
            handleResponse: function(a, b) {
                var c = b.result && b.result.files;
                c ? b.scope().replace(b.files, c) : (b.errorThrown || "error" === b.textStatus) && (b.files[0].error = b.errorThrown || b.textStatus)
            },
            add: function(a, b) {
                if (a.isDefaultPrevented()) return ! 1;
                var d = b.scope(),
                e = [];
                angular.forEach(b.files,
                function(a) {
                    e.push(a)
                }),
                d.$apply(function() {
                    c(d, b);
                    var a = d.option("prependFiles") ? "unshift": "push";
                    Array.prototype[a].apply(d.queue, b.files)
                }),
                b.process(function() {
                    return d.process(b)
                }).always(function() {
                    d.$apply(function() {
                        c(d, b),
                        d.replace(e, b.files)
                    })
                }).then(function() { (d.option("autoUpload") || b.autoUpload) && b.autoUpload !== !1 && b.submit()
                })
            },
            progress: function(a, b) {
                return a.isDefaultPrevented() ? !1 : void b.scope().$apply()
            },
            done: function(a, b) {
                if (a.isDefaultPrevented()) return ! 1;
                var c = this;
                b.scope().$apply(function() {
                    b.handleResponse.call(c, a, b)
                })
            },
            fail: function(a, b) {
                if (a.isDefaultPrevented()) return ! 1;
                var c = this;
                "abort" !== b.errorThrown && b.scope().$apply(function() {
                    b.handleResponse.call(c, a, b)
                })
            },
            stop: b,
            processstart: b,
            processstop: b,
            getNumberOfFiles: function() {
                var a = this.scope();
                return a.queue.length - a.processing()
            },
            dataType: "json",
            autoUpload: !1
        },
        this.$get = [function() {
            return {
                defaults: a
            }
        }]
    }).provider("formatFileSizeFilter",
    function() {
        var a = {
            units: [{
                size: 1e9,
                suffix: " GB"
            },
            {
                size: 1e6,
                suffix: " MB"
            },
            {
                size: 1e3,
                suffix: " KB"
            }]
        };
        this.defaults = a,
        this.$get = function() {
            return function(b) {
                if (!angular.isNumber(b)) return "";
                for (var c, d, e = !0,
                f = 0; e;) {
                    if (e = a.units[f], c = e.prefix || "", d = e.suffix || "", f === a.units.length - 1 || b >= e.size) return c + (b / e.size).toFixed(2) + d;
                    f += 1
                }
            }
        }
    }).controller("FileUploadController", ["$scope", "$element", "$attrs", "$window", "fileUpload",
    function(a, b, c, d, e) {
        var f = {
            progress: function() {
                return b.fileupload("progress")
            },
            active: function() {
                return b.fileupload("active")
            },
            option: function(a, c) {
                return b.fileupload("option", a, c)
            },
            add: function(a) {
                return b.fileupload("add", a)
            },
            send: function(a) {
                return b.fileupload("send", a)
            },
            process: function(a) {
                return b.fileupload("process", a)
            },
            processing: function(a) {
                return b.fileupload("processing", a)
            }
        };
        a.disabled = !d.jQuery.support.fileInput,
        a.queue = a.queue || [],
        a.clear = function(a) {
            var b = this.queue,
            c = b.length,
            d = a,
            e = 1;
            for (angular.isArray(a) && (d = a[0], e = a.length); c;) if (c -= 1, b[c] === d) return b.splice(c, e)
        },
        a.replace = function(a, b) {
            var c, d, e = this.queue,
            f = a[0];
            for (c = 0; c < e.length; c += 1) if (e[c] === f) {
                for (d = 0; d < b.length; d += 1) e[c + d] = b[d];
                return
            }
        },
        a.applyOnQueue = function(a) {
            var b, c, d = this.queue.slice(0);
            for (b = 0; b < d.length; b += 1) c = d[b],
            c[a] && c[a]()
        },
        a.submit = function() {
            this.applyOnQueue("$submit")
        },
        a.cancel = function() {
            this.applyOnQueue("$cancel")
        },
        angular.extend(a, f),
        b.fileupload(angular.extend({
            scope: function() {
                return a
            }
        },
        e.defaults)).on("fileuploadadd",
        function(b, c) {
            c.scope = a.option("scope")
        }).on("fileuploadfail",
        function(a, b) {
            if ("abort" !== b.errorThrown && b.dataType && b.dataType.indexOf("json") === b.dataType.length - 4) try {
                b.result = angular.fromJson(b.jqXHR.responseText)
            } catch(c) {}
        }).on(["fileuploadadd", "fileuploadsubmit", "fileuploadsend", "fileuploaddone", "fileuploadfail", "fileuploadalways", "fileuploadprogress", "fileuploadprogressall", "fileuploadstart", "fileuploadstop", "fileuploadchange", "fileuploadpaste", "fileuploaddrop", "fileuploaddragover", "fileuploadchunksend", "fileuploadchunkdone", "fileuploadchunkfail", "fileuploadchunkalways", "fileuploadprocessstart", "fileuploadprocess", "fileuploadprocessdone", "fileuploadprocessfail", "fileuploadprocessalways", "fileuploadprocessstop"].join(" "),
        function(b, c) {
            a.$emit(b.type, c).defaultPrevented && b.preventDefault()
        }).on("remove",
        function() {
            var b;
            for (b in f) f.hasOwnProperty(b) && delete a[b]
        }),
        a.$watch(c.fileUpload,
        function(a) {
            a && b.fileupload("option", a)
        })
    }]).controller("FileUploadProgressController", ["$scope", "$attrs", "$parse",
    function(a, b, c) {
        var d = c(b.fileUploadProgress),
        e = function() {
            var b = d(a);
            b && b.total && (a.num = Math.floor(b.loaded / b.total * 100))
        };
        e(),
        a.$watch(b.fileUploadProgress + ".loaded",
        function(a, b) {
            a !== b && e()
        })
    }]).controller("FileUploadPreviewController", ["$scope", "$element", "$attrs",
    function(a, b, c) {
        a.$watch(c.fileUploadPreview + ".preview",
        function(a) {
            a && b.empty().append(a)
        })
    }]).directive("fileUpload",
    function() {
        return {
            controller: "FileUploadController",
            scope: !0
        }
    }).directive("fileUploadProgress",
    function() {
        return {
            controller: "FileUploadProgressController",
            scope: !0
        }
    }).directive("fileUploadPreview",
    function() {
        return {
            controller: "FileUploadPreviewController"
        }
    }).directive("download",
    function() {
        return function(a, b) {
            b.on("dragstart",
            function(a) {
                try {
                    a.originalEvent.dataTransfer.setData("DownloadURL", ["application/octet-stream", b.prop("download"), b.prop("href")].join(":"))
                } catch(c) {}
            })
        }
    })
}),
function(a) {
    a.extend(a, {
        placeholder: {
            browser_supported: function() {
                return void 0 !== this._supported ? this._supported: this._supported = !!("placeholder" in a('<input type="text">')[0])
            },
            shim: function(b) {
                var c = {
                    color: "#888",
                    cls: "placeholder",
                    selector: "input[placeholder], textarea[placeholder]"
                };
                return a.extend(c, b),
                !this.browser_supported() && a(c.selector)._placeholder_shim(c)
            }
        }
    }),
    a.extend(a.fn, {
        _placeholder_shim: function(b) {
            function c(b) {
                var c = a(b).offsetParent().offset(),
                d = a(b).offset();
                return {
                    top: d.top - c.top,
                    left: d.left - c.left,
                    width: a(b).width()
                }
            }
            function d(b) {
                var e = b.data("target");
                "undefined" != typeof e && (b.css(c(e)), a(window).one("resize",
                function() {
                    d(b)
                }))
            }
            return this.each(function() {
                var e = a(this);
                if (e.is(":visible")) {
                    if (e.data("placeholder")) {
                        var f = e.data("placeholder");
                        return f.css(c(e)),
                        !0
                    }
                    var g = {};
                    e.is("textarea") || "auto" == e.css("height") || (g = {
                        lineHeight: e.css("height"),
                        whiteSpace: "nowrap"
                    });
                    var h = "border-box" === e.css("box-sizing"),
                    i = e.is("textarea"),
                    j = a("<label />").text(e.attr("placeholder")).addClass(b.cls).css(a.extend({
                        position: "absolute",
                        display: "inline",
                        "float": "none",
                        overflow: "hidden",
                        textAlign: "left",
                        color: b.color,
                        cursor: "text",
                        paddingTop: !i && h ? "0": e.css("padding-top"),
                        paddingRight: e.css("padding-right"),
                        paddingBottom: !i && h ? "0": e.css("padding-bottom"),
                        paddingLeft: e.css("padding-left"),
                        fontSize: e.css("font-size"),
                        fontFamily: e.css("font-family"),
                        fontStyle: e.css("font-style"),
                        fontWeight: e.css("font-weight"),
                        textTransform: e.css("text-transform"),
                        backgroundColor: "transparent",
                        zIndex: 99
                    },
                    g)).css(c(this)).attr("for", this.id).data("target", e).click(function() {
                        a(this).data("target").is(":disabled") || a(this).data("target").focus()
                    }).insertBefore(this);
                    e.data("placeholder", j).on("keydown",
                    function() {
                        j.hide()
                    }).on("blur change",
                    function() {
                        j[e.val().length ? "hide": "show"]()
                    }).triggerHandler("blur"),
                    a(window).one("resize",
                    function() {
                        d(j)
                    })
                }
            })
        }
    })
} (jQuery),
jQuery(document).add(window).bind("ready load",
function() {
    jQuery.placeholder && jQuery.placeholder.shim()
}),
angular.module("placeholderShim", []).directive("placeholder", ["$interpolate", "$timeout",
function(a, b) {
    return jQuery.placeholder.browser_supported() ? {}: function(c, d) {
        function e() {
            j = b(function() {
                d._placeholder_shim(f),
                i = d.data("placeholder"),
                j = null
            })
        }
        var f = {
            color: "#888",
            cls: "placeholder"
        },
        g = a(d.attr("placeholder")),
        h = null,
        i = null,
        j = null;
        d.is(":visible") && e(),
        c.$watch(function() {
            if (i || !d.is(":visible") || j || e(), i && d.get(0) !== document.activeElement && (d.val().length ? i.hide() : i.show()), i) {
                var a = g(c);
                a !== h && (h = a, i.text(h))
            }
        }),
        c.$on("$destroy",
        function() {
            j && (b.cancel(j), j = null)
        })
    }
}]),
function(a) {
    if ("object" == typeof exports && "undefined" != typeof module) module.exports = a();
    else if ("function" == typeof define && define.amd) define([], a);
    else {
        var b;
        b = "undefined" != typeof window ? window: "undefined" != typeof global ? global: "undefined" != typeof self ? self: this,
        b.Raven = a()
    }
} (function() {
    return function a(b, c, d) {
        function e(g, h) {
            if (!c[g]) {
                if (!b[g]) {
                    var i = "function" == typeof require && require;
                    if (!h && i) return i(g, !0);
                    if (f) return f(g, !0);
                    var j = new Error("Cannot find module '" + g + "'");
                    throw j.code = "MODULE_NOT_FOUND",
                    j
                }
                var k = c[g] = {
                    exports: {}
                };
                b[g][0].call(k.exports,
                function(a) {
                    var c = b[g][1][a];
                    return e(c ? c: a)
                },
                k, k.exports, a, b, c, d)
            }
            return c[g].exports
        }
        for (var f = "function" == typeof require && require,
        g = 0; g < d.length; g++) e(d[g]);
        return e
    } ({
        1 : [function(a, b, c) {
            "use strict";
            function d(a) {
                this.name = "RavenConfigError",
                this.message = a
            }
            d.prototype = new Error,
            d.prototype.constructor = d,
            b.exports = d
        },
        {}],
        2 : [function(a, b, c) {
            "use strict";
            function d() {
                return + new Date
            }
            function e() {
                this._hasJSON = !("object" != typeof JSON || !JSON.stringify),
                this._hasDocument = "undefined" != typeof document,
                this._lastCapturedException = null,
                this._lastEventId = null,
                this._globalServer = null,
                this._globalKey = null,
                this._globalProject = null,
                this._globalContext = {},
                this._globalOptions = {
                    logger: "javascript",
                    ignoreErrors: [],
                    ignoreUrls: [],
                    whitelistUrls: [],
                    includePaths: [],
                    crossOrigin: "anonymous",
                    collectWindowErrors: !0,
                    maxMessageLength: 0,
                    stackTraceLimit: 50
                },
                this._ignoreOnError = 0,
                this._isRavenInstalled = !1,
                this._originalErrorStackTraceLimit = Error.stackTraceLimit,
                this._originalConsole = window.console || {},
                this._originalConsoleMethods = {},
                this._plugins = [],
                this._startTime = d(),
                this._wrappedBuiltIns = [];
                for (var a in this._originalConsole) this._originalConsoleMethods[a] = this._originalConsole[a]
            }
            var f = a(5),
            g = a(1),
            h = a(4),
            i = h.isFunction,
            j = h.isUndefined,
            k = h.isError,
            l = h.isEmptyObject,
            m = h.hasKey,
            n = h.joinRegExp,
            o = h.each,
            p = h.objectMerge,
            q = h.truncate,
            r = h.urlencode,
            s = h.uuid4,
            t = "source protocol user pass host port path".split(" "),
            u = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;
            e.prototype = {
                VERSION: "2.3.0",
                debug: !1,
                TraceKit: f,
                config: function(a, b) {
                    var c = this;
                    if (this._globalServer) return this._logDebug("error", "Error: Raven has already been configured"),
                    this;
                    if (!a) return this;
                    b && o(b,
                    function(a, b) {
                        "tags" === a || "extra" === a ? c._globalContext[a] = b: c._globalOptions[a] = b
                    });
                    var d = this._parseDSN(a),
                    e = d.path.lastIndexOf("/"),
                    g = d.path.substr(1, e);
                    return this._dsn = a,
                    this._globalOptions.ignoreErrors.push(/^Script error\.?$/),
                    this._globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),
                    this._globalOptions.ignoreErrors = n(this._globalOptions.ignoreErrors),
                    this._globalOptions.ignoreUrls = this._globalOptions.ignoreUrls.length ? n(this._globalOptions.ignoreUrls) : !1,
                    this._globalOptions.whitelistUrls = this._globalOptions.whitelistUrls.length ? n(this._globalOptions.whitelistUrls) : !1,
                    this._globalOptions.includePaths = n(this._globalOptions.includePaths),
                    this._globalKey = d.user,
                    this._globalSecret = d.pass && d.pass.substr(1),
                    this._globalProject = d.path.substr(e + 1),
                    this._globalServer = this._getGlobalServer(d),
                    this._globalEndpoint = this._globalServer + "/" + g + "api/" + this._globalProject + "/store/",
                    this._globalOptions.fetchContext && (f.remoteFetching = !0),
                    this._globalOptions.linesOfContext && (f.linesOfContext = this._globalOptions.linesOfContext),
                    f.collectWindowErrors = !!this._globalOptions.collectWindowErrors,
                    this
                },
                install: function() {
                    var a = this;
                    return this.isSetup() && !this._isRavenInstalled && (f.report.subscribe(function() {
                        a._handleOnErrorStackInfo.apply(a, arguments)
                    }), this._wrapBuiltIns(), this._drainPlugins(), this._isRavenInstalled = !0),
                    Error.stackTraceLimit = this._globalOptions.stackTraceLimit,
                    this
                },
                context: function(a, b, c) {
                    return i(a) && (c = b || [], b = a, a = void 0),
                    this.wrap(a, b).apply(this, c)
                },
                wrap: function(a, b) {
                    function c() {
                        for (var c = [], e = arguments.length, f = !a || a && a.deep !== !1; e--;) c[e] = f ? d.wrap(a, arguments[e]) : arguments[e];
                        try {
                            return b.apply(this, c)
                        } catch(g) {
                            throw d._ignoreNextOnError(),
                            d.captureException(g, a),
                            g
                        }
                    }
                    var d = this;
                    if (j(b) && !i(a)) return a;
                    if (i(a) && (b = a, a = void 0), !i(b)) return b;
                    try {
                        if (b.__raven__) return b
                    } catch(e) {
                        return b
                    }
                    if (b.__raven_wrapper__) return b.__raven_wrapper__;
                    for (var f in b) m(b, f) && (c[f] = b[f]);
                    return b.__raven_wrapper__ = c,
                    c.prototype = b.prototype,
                    c.__raven__ = !0,
                    c.__inner__ = b,
                    c
                },
                uninstall: function() {
                    return f.report.uninstall(),
                    this._restoreBuiltIns(),
                    Error.stackTraceLimit = this._originalErrorStackTraceLimit,
                    this._isRavenInstalled = !1,
                    this
                },
                captureException: function(a, b) {
                    if (!k(a)) return this.captureMessage(a, b);
                    this._lastCapturedException = a;
                    try {
                        var c = f.computeStackTrace(a);
                        this._handleStackInfo(c, b)
                    } catch(d) {
                        if (a !== d) throw d
                    }
                    return this
                },
                captureMessage: function(a, b) {
                    return this._globalOptions.ignoreErrors.test && this._globalOptions.ignoreErrors.test(a) ? void 0 : (this._send(p({
                        message: a + ""
                    },
                    b)), this)
                },
                addPlugin: function(a) {
                    var b = Array.prototype.slice.call(arguments, 1);
                    return this._plugins.push([a, b]),
                    this._isRavenInstalled && this._drainPlugins(),
                    this
                },
                setUserContext: function(a) {
                    return this._globalContext.user = a,
                    this
                },
                setExtraContext: function(a) {
                    return this._mergeContext("extra", a),
                    this
                },
                setTagsContext: function(a) {
                    return this._mergeContext("tags", a),
                    this
                },
                clearContext: function() {
                    return this._globalContext = {},
                    this
                },
                getContext: function() {
                    return JSON.parse(JSON.stringify(this._globalContext))
                },
                setRelease: function(a) {
                    return this._globalOptions.release = a,
                    this
                },
                setDataCallback: function(a) {
                    return this._globalOptions.dataCallback = a,
                    this
                },
                setShouldSendCallback: function(a) {
                    return this._globalOptions.shouldSendCallback = a,
                    this
                },
                setTransport: function(a) {
                    return this._globalOptions.transport = a,
                    this
                },
                lastException: function() {
                    return this._lastCapturedException
                },
                lastEventId: function() {
                    return this._lastEventId
                },
                isSetup: function() {
                    return this._hasJSON ? this._globalServer ? !0 : (this.ravenNotConfiguredError || (this.ravenNotConfiguredError = !0, this._logDebug("error", "Error: Raven has not been configured.")), !1) : !1
                },
                afterLoad: function() {
                    var a = window.RavenConfig;
                    a && this.config(a.dsn, a.config).install()
                },
                showReportDialog: function(a) {
                    if (window.document) {
                        a = a || {};
                        var b = a.eventId || this.lastEventId();
                        if (!b) throw new g("Missing eventId");
                        var c = a.dsn || this._dsn;
                        if (!c) throw new g("Missing DSN");
                        var d = encodeURIComponent,
                        e = "";
                        e += "?eventId=" + d(b),
                        e += "&dsn=" + d(c);
                        var f = a.user || this._globalContext.user;
                        f && (f.name && (e += "&name=" + d(f.name)), f.email && (e += "&email=" + d(f.email)));
                        var h = this._getGlobalServer(this._parseDSN(c)),
                        i = document.createElement("script");
                        i.async = !0,
                        i.src = h + "/api/embed/error-page/" + e,
                        (document.head || document.body).appendChild(i)
                    }
                },
                _ignoreNextOnError: function() {
                    var a = this;
                    this._ignoreOnError += 1,
                    setTimeout(function() {
                        a._ignoreOnError -= 1
                    })
                },
                _triggerEvent: function(a, b) {
                    var c, d;
                    if (this._hasDocument) {
                        b = b || {},
                        a = "raven" + a.substr(0, 1).toUpperCase() + a.substr(1),
                        document.createEvent ? (c = document.createEvent("HTMLEvents"), c.initEvent(a, !0, !0)) : (c = document.createEventObject(), c.eventType = a);
                        for (d in b) m(b, d) && (c[d] = b[d]);
                        if (document.createEvent) document.dispatchEvent(c);
                        else try {
                            document.fireEvent("on" + c.eventType.toLowerCase(), c)
                        } catch(e) {}
                    }
                },
                _wrapBuiltIns: function() {
                    function a(a, b, d, e) {
                        var f = a[b];
                        a[b] = d(f),
                        e || c._wrappedBuiltIns.push([a, b, f])
                    }
                    function b(a) {
                        return function(b, d) {
                            var e = [].slice.call(arguments),
                            f = e[0];
                            return i(f) && (e[0] = c.wrap(f)),
                            a.apply ? a.apply(this, e) : a(e[0], e[1])
                        }
                    }
                    var c = this;
                    a(window, "setTimeout", b),
                    a(window, "setInterval", b),
                    window.requestAnimationFrame && a(window, "requestAnimationFrame",
                    function(a) {
                        return function(b) {
                            return a(c.wrap(b))
                        }
                    }),
                    "EventTarget Window Node ApplicationCache AudioTrackList ChannelMergerNode CryptoOperation EventSource FileReader HTMLUnknownElement IDBDatabase IDBRequest IDBTransaction KeyOperation MediaController MessagePort ModalWindow Notification SVGElementInstance Screen TextTrack TextTrackCue TextTrackList WebSocket WebSocketWorker Worker XMLHttpRequest XMLHttpRequestEventTarget XMLHttpRequestUpload".replace(/\w+/g,
                    function(b) {
                        var d = window[b] && window[b].prototype;
                        d && d.hasOwnProperty && d.hasOwnProperty("addEventListener") && (a(d, "addEventListener",
                        function(a) {
                            return function(b, d, e, f) {
                                try {
                                    d && d.handleEvent && (d.handleEvent = c.wrap(d.handleEvent))
                                } catch(g) {}
                                return a.call(this, b, c.wrap(d), e, f)
                            }
                        }), a(d, "removeEventListener",
                        function(a) {
                            return function(b, c, d, e) {
                                return c = c && (c.__raven_wrapper__ ? c.__raven_wrapper__: c),
                                a.call(this, b, c, d, e)
                            }
                        }))
                    }),
                    "XMLHttpRequest" in window && a(XMLHttpRequest.prototype, "send",
                    function(b) {
                        return function(d) {
                            var e = this;
                            return "onreadystatechange onload onerror onprogress".replace(/\w+/g,
                            function(b) {
                                b in e && "[object Function]" === Object.prototype.toString.call(e[b]) && a(e, b,
                                function(a) {
                                    return c.wrap(a)
                                },
                                !0)
                            }),
                            b.apply(this, arguments)
                        }
                    });
                    var d = window.jQuery || window.$;
                    d && d.fn && d.fn.ready && a(d.fn, "ready",
                    function(a) {
                        return function(b) {
                            return a.call(this, c.wrap(b))
                        }
                    })
                },
                _restoreBuiltIns: function() {
                    for (var a; this._wrappedBuiltIns.length;) {
                        a = this._wrappedBuiltIns.shift();
                        var b = a[0],
                        c = a[1],
                        d = a[2];
                        b[c] = d
                    }
                },
                _drainPlugins: function() {
                    var a = this;
                    o(this._plugins,
                    function(b, c) {
                        var d = c[0],
                        e = c[1];
                        d.apply(a, [a].concat(e))
                    })
                },
                _parseDSN: function(a) {
                    var b = u.exec(a),
                    c = {},
                    d = 7;
                    try {
                        for (; d--;) c[t[d]] = b[d] || ""
                    } catch(e) {
                        throw new g("Invalid DSN: " + a)
                    }
                    if (c.pass && !this._globalOptions.allowSecretKey) throw new g("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");
                    return c
                },
                _getGlobalServer: function(a) {
                    var b = "//" + a.host + (a.port ? ":" + a.port: "");
                    return a.protocol && (b = a.protocol + ":" + b),
                    b
                },
                _handleOnErrorStackInfo: function() {
                    this._ignoreOnError || this._handleStackInfo.apply(this, arguments)
                },
                _handleStackInfo: function(a, b) {
                    var c = this,
                    d = [];
                    a.stack && a.stack.length && o(a.stack,
                    function(a, b) {
                        var e = c._normalizeFrame(b);
                        e && d.push(e)
                    }),
                    this._triggerEvent("handle", {
                        stackInfo: a,
                        options: b
                    }),
                    this._processException(a.name, a.message, a.url, a.lineno, d.slice(0, this._globalOptions.stackTraceLimit), b)
                },
                _normalizeFrame: function(a) {
                    if (a.url) {
                        var b, c = {
                            filename: a.url,
                            lineno: a.line,
                            colno: a.column,
                            "function": a.func || "?"
                        },
                        d = this._extractContextFromFrame(a);
                        if (d) {
                            var e = ["pre_context", "context_line", "post_context"];
                            for (b = 3; b--;) c[e[b]] = d[b]
                        }
                        return c.in_app = !(this._globalOptions.includePaths.test && !this._globalOptions.includePaths.test(c.filename) || /(Raven|TraceKit)\./.test(c["function"]) || /raven\.(min\.)?js$/.test(c.filename)),
                        c
                    }
                },
                _extractContextFromFrame: function(a) {
                    if (a.context && this._globalOptions.fetchContext) {
                        for (var b = a.context,
                        c = ~~ (b.length / 2), d = b.length, e = !1; d--;) if (b[d].length > 300) {
                            e = !0;
                            break
                        }
                        if (e) {
                            if (j(a.column)) return;
                            return [[], b[c].substr(a.column, 50), []]
                        }
                        return [b.slice(0, c), b[c], b.slice(c + 1)]
                    }
                },
                _processException: function(a, b, c, d, e, f) {
                    var g, h;
                    if ((!this._globalOptions.ignoreErrors.test || !this._globalOptions.ignoreErrors.test(b)) && (b += "", b = q(b, this._globalOptions.maxMessageLength), h = (a ? a + ": ": "") + b, h = q(h, this._globalOptions.maxMessageLength), e && e.length ? (c = e[0].filename || c, e.reverse(), g = {
                        frames: e
                    }) : c && (g = {
                        frames: [{
                            filename: c,
                            lineno: d,
                            in_app: !0
                        }]
                    }), (!this._globalOptions.ignoreUrls.test || !this._globalOptions.ignoreUrls.test(c)) && (!this._globalOptions.whitelistUrls.test || this._globalOptions.whitelistUrls.test(c)))) {
                        var i = p({
                            exception: {
                                values: [{
                                    type: a,
                                    value: b,
                                    stacktrace: g
                                }]
                            },
                            culprit: c,
                            message: h
                        },
                        f);
                        this._send(i)
                    }
                },
                _trimPacket: function(a) {
                    var b = this._globalOptions.maxMessageLength;
                    if (a.message = q(a.message, b), a.exception) {
                        var c = a.exception.values[0];
                        c.value = q(c.value, b)
                    }
                    return a
                },
                _getHttpData: function() {
                    if (this._hasDocument && document.location && document.location.href) {
                        var a = {
                            headers: {
                                "User-Agent": navigator.userAgent
                            }
                        };
                        return a.url = document.location.href,
                        document.referrer && (a.headers.Referer = document.referrer),
                        a
                    }
                },
                _send: function(a) {
                    var b = this,
                    c = this._globalOptions,
                    e = {
                        project: this._globalProject,
                        logger: c.logger,
                        platform: "javascript"
                    },
                    f = this._getHttpData();
                    if (f && (e.request = f), a = p(e, a), a.tags = p(p({},
                    this._globalContext.tags), a.tags), a.extra = p(p({},
                    this._globalContext.extra), a.extra), a.extra["session:duration"] = d() - this._startTime, l(a.tags) && delete a.tags, this._globalContext.user && (a.user = this._globalContext.user), c.release && (a.release = c.release), c.serverName && (a.server_name = c.serverName), i(c.dataCallback) && (a = c.dataCallback(a) || a), a && !l(a) && (!i(c.shouldSendCallback) || c.shouldSendCallback(a)) && (this._lastEventId = a.event_id || (a.event_id = s()), a = this._trimPacket(a), this._logDebug("debug", "Raven about to send:", a), this.isSetup())) {
                        var g = {
                            sentry_version: "7",
                            sentry_client: "raven-js/" + this.VERSION,
                            sentry_key: this._globalKey
                        };
                        this._globalSecret && (g.sentry_secret = this._globalSecret);
                        var h = this._globalEndpoint; (c.transport || this._makeRequest).call(this, {
                            url: h,
                            auth: g,
                            data: a,
                            options: c,
                            onSuccess: function() {
                                b._triggerEvent("success", {
                                    data: a,
                                    src: h
                                })
                            },
                            onError: function() {
                                b._triggerEvent("failure", {
                                    data: a,
                                    src: h
                                })
                            }
                        })
                    }
                },
                _makeImageRequest: function(a) {
                    a.auth.sentry_data = JSON.stringify(a.data);
                    var b = this._newImage(),
                    c = a.url + "?" + r(a.auth),
                    d = a.options.crossOrigin; (d || "" === d) && (b.crossOrigin = d),
                    b.onload = a.onSuccess,
                    b.onerror = b.onabort = a.onError,
                    b.src = c
                },
                _makeXhrRequest: function(a) {
                    function b() {
                        200 === c.status ? a.onSuccess && a.onSuccess() : a.onError && a.onError()
                    }
                    var c, d = a.url;
                    c = new XMLHttpRequest,
                    "withCredentials" in c ? c.onreadystatechange = function() {
                        4 === c.readyState && b()
                    }: (c = new XDomainRequest, d = d.replace(/^https?:/, ""), c.onload = b),
                    c.open("POST", d + "?" + r(a.auth)),
                    c.send(JSON.stringify(a.data))
                },
                _makeRequest: function(a) {
                    var b = "withCredentials" in new XMLHttpRequest || "undefined" != typeof XDomainRequest;
                    return (b ? this._makeXhrRequest: this._makeImageRequest)(a)
                },
                _newImage: function() {
                    return document.createElement("img")
                },
                _logDebug: function(a) {
                    this._originalConsoleMethods[a] && this.debug && Function.prototype.apply.call(this._originalConsoleMethods[a], this._originalConsole, [].slice.call(arguments, 1))
                },
                _mergeContext: function(a, b) {
                    j(b) ? delete this._globalContext[a] : this._globalContext[a] = p(this._globalContext[a] || {},
                    b)
                }
            },
            e.prototype.setUser = e.prototype.setUserContext,
            e.prototype.setReleaseContext = e.prototype.setRelease,
            b.exports = e
        },
        {
            1 : 1,
            4 : 4,
            5 : 5
        }],
        3 : [function(a, b, c) {
            "use strict";
            var d = a(2),
            e = window.Raven,
            f = new d;
            f.noConflict = function() {
                return window.Raven = e,
                f
            },
            f.afterLoad(),
            b.exports = f
        },
        {
            2 : 2
        }],
        4 : [function(a, b, c) {
            "use strict";
            function d(a) {
                return void 0 === a
            }
            function e(a) {
                return "function" == typeof a
            }
            function f(a) {
                return "[object String]" === q.toString.call(a)
            }
            function g(a) {
                return "object" == typeof a && null !== a
            }
            function h(a) {
                for (var b in a) return ! 1;
                return ! 0
            }
            function i(a) {
                var b = q.toString.call(a);
                return g(a) && "[object Error]" === b || "[object Exception]" === b || a instanceof Error
            }
            function j(a, b) {
                var c, e;
                if (d(a.length)) for (c in a) m(a, c) && b.call(null, c, a[c]);
                else if (e = a.length) for (c = 0; e > c; c++) b.call(null, c, a[c])
            }
            function k(a, b) {
                return b ? (j(b,
                function(b, c) {
                    a[b] = c
                }), a) : a
            }
            function l(a, b) {
                return ! b || a.length <= b ? a: a.substr(0, b) + "…"
            }
            function m(a, b) {
                return q.hasOwnProperty.call(a, b)
            }
            function n(a) {
                for (var b, c = [], d = 0, e = a.length; e > d; d++) b = a[d],
                f(b) ? c.push(b.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1")) : b && b.source && c.push(b.source);
                return new RegExp(c.join("|"), "i")
            }
            function o(a) {
                var b = [];
                return j(a,
                function(a, c) {
                    b.push(encodeURIComponent(a) + "=" + encodeURIComponent(c))
                }),
                b.join("&")
            }
            function p() {
                var a = window.crypto || window.msCrypto;
                if (!d(a) && a.getRandomValues) {
                    var b = new Uint16Array(8);
                    a.getRandomValues(b),
                    b[3] = 4095 & b[3] | 16384,
                    b[4] = 16383 & b[4] | 32768;
                    var c = function(a) {
                        for (var b = a.toString(16); b.length < 4;) b = "0" + b;
                        return b
                    };
                    return c(b[0]) + c(b[1]) + c(b[2]) + c(b[3]) + c(b[4]) + c(b[5]) + c(b[6]) + c(b[7])
                }
                return "xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,
                function(a) {
                    var b = 16 * Math.random() | 0,
                    c = "x" === a ? b: 3 & b | 8;
                    return c.toString(16)
                })
            }
            var q = Object.prototype;
            b.exports = {
                isUndefined: d,
                isFunction: e,
                isString: f,
                isObject: g,
                isEmptyObject: h,
                isError: i,
                each: j,
                objectMerge: k,
                truncate: l,
                hasKey: m,
                joinRegExp: n,
                urlencode: o,
                uuid4: p
            }
        },
        {}],
        5 : [function(a, b, c) {
            "use strict";
            function d() {
                return "undefined" == typeof document ? "": document.location.href
            }
            var e = a(4),
            f = e.hasKey,
            g = e.isString,
            h = e.isUndefined,
            i = {
                remoteFetching: !1,
                collectWindowErrors: !0,
                linesOfContext: 7,
                debug: !1
            },
            j = [].slice,
            k = "?",
            l = /^(?:Uncaught )?((?:Eval|Internal|Range|Reference|Syntax|Type|URI)Error)\: ?(.*)$/;
            i.report = function() {
                function a(a) {
                    k(),
                    r.push(a)
                }
                function b(a) {
                    for (var b = r.length - 1; b >= 0; --b) r[b] === a && r.splice(b, 1)
                }
                function c() {
                    m(),
                    r = []
                }
                function e(a, b) {
                    var c = null;
                    if (!b || i.collectWindowErrors) {
                        for (var d in r) if (f(r, d)) try {
                            r[d].apply(null, [a].concat(j.call(arguments, 2)))
                        } catch(e) {
                            c = e
                        }
                        if (c) throw c
                    }
                }
                function h(a, b, c, f, h) {
                    var j = null;
                    if (u) i.computeStackTrace.augmentStackTraceWithInitialElement(u, b, c, a),
                    n();
                    else if (h) j = i.computeStackTrace(h),
                    e(j, !0);
                    else {
                        var k = {
                            url: b,
                            line: c,
                            column: f
                        };
                        k.func = i.computeStackTrace.guessFunctionName(k.url, k.line),
                        k.context = i.computeStackTrace.gatherContext(k.url, k.line);
                        var m, o = void 0,
                        q = a;
                        if (g(a)) {
                            var m = a.match(l);
                            m && (o = m[1], q = m[2])
                        }
                        j = {
                            name: o,
                            message: q,
                            url: d(),
                            stack: [k]
                        },
                        e(j, !0)
                    }
                    return p ? p.apply(this, arguments) : !1
                }
                function k() {
                    q || (p = window.onerror, window.onerror = h, q = !0)
                }
                function m() {
                    q && (window.onerror = p, q = !1, p = void 0)
                }
                function n() {
                    var a = u,
                    b = s;
                    s = null,
                    u = null,
                    t = null,
                    e.apply(null, [a, !1].concat(b))
                }
                function o(a, b) {
                    var c = j.call(arguments, 1);
                    if (u) {
                        if (t === a) return;
                        n()
                    }
                    var d = i.computeStackTrace(a);
                    if (u = d, t = a, s = c, window.setTimeout(function() {
                        t === a && n()
                    },
                    d.incomplete ? 2e3: 0), b !== !1) throw a
                }
                var p, q, r = [],
                s = null,
                t = null,
                u = null;
                return o.subscribe = a,
                o.unsubscribe = b,
                o.uninstall = c,
                o
            } (),
            i.computeStackTrace = function() {
                function a(a) {
                    if (!i.remoteFetching) return "";
                    try {
                        var b = function() {
                            try {
                                return new window.XMLHttpRequest
                            } catch(a) {
                                return new window.ActiveXObject("Microsoft.XMLHTTP")
                            }
                        },
                        c = b();
                        return c.open("GET", a, !1),
                        c.send(""),
                        c.responseText
                    } catch(d) {
                        return ""
                    }
                }
                function b(b) {
                    if (!g(b)) return [];
                    if (!f(v, b)) {
                        var c = "",
                        d = "";
                        try {
                            d = document.domain
                        } catch(e) {} - 1 !== b.indexOf(d) && (c = a(b)),
                        v[b] = c ? c.split("\n") : []
                    }
                    return v[b]
                }
                function c(a, c) {
                    var d, e = /function ([^(]*)\(([^)]*)\)/,
                    f = /['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/,
                    g = "",
                    i = 10,
                    j = b(a);
                    if (!j.length) return k;
                    for (var l = 0; i > l; ++l) if (g = j[c - l] + g, !h(g)) {
                        if (d = f.exec(g)) return d[1];
                        if (d = e.exec(g)) return d[1]
                    }
                    return k
                }
                function e(a, c) {
                    var d = b(a);
                    if (!d.length) return null;
                    var e = [],
                    f = Math.floor(i.linesOfContext / 2),
                    g = f + i.linesOfContext % 2,
                    j = Math.max(0, c - f - 1),
                    k = Math.min(d.length, c + g - 1);
                    c -= 1;
                    for (var l = j; k > l; ++l) h(d[l]) || e.push(d[l]);
                    return e.length > 0 ? e: null
                }
                function j(a) {
                    return a.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g, "\\$&")
                }
                function l(a) {
                    return j(a).replace("<", "(?:<|&lt;)").replace(">", "(?:>|&gt;)").replace("&", "(?:&|&amp;)").replace('"', '(?:"|&quot;)').replace(/\s+/g, "\\s+")
                }
                function m(a, c) {
                    for (var d, e, f = 0,
                    g = c.length; g > f; ++f) if ((d = b(c[f])).length && (d = d.join("\n"), e = a.exec(d))) return {
                        url: c[f],
                        line: d.substring(0, e.index).split("\n").length,
                        column: e.index - d.lastIndexOf("\n", e.index) - 1
                    };
                    return null
                }
                function n(a, c, d) {
                    var e, f = b(c),
                    g = new RegExp("\\b" + j(a) + "\\b");
                    return d -= 1,
                    f && f.length > d && (e = g.exec(f[d])) ? e.index: null
                }
                function o(a) {
                    if ("undefined" != typeof document) {
                        for (var b, c, d, e, f = [window.location.href], g = document.getElementsByTagName("script"), h = "" + a, i = /^function(?:\s+([\w$]+))?\s*\(([\w\s,]*)\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/, k = /^function on([\w$]+)\s*\(event\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/, n = 0; n < g.length; ++n) {
                            var o = g[n];
                            o.src && f.push(o.src)
                        }
                        if (d = i.exec(h)) {
                            var p = d[1] ? "\\s+" + d[1] : "",
                            q = d[2].split(",").join("\\s*,\\s*");
                            b = j(d[3]).replace(/;$/, ";?"),
                            c = new RegExp("function" + p + "\\s*\\(\\s*" + q + "\\s*\\)\\s*{\\s*" + b + "\\s*}")
                        } else c = new RegExp(j(h).replace(/\s+/g, "\\s+"));
                        if (e = m(c, f)) return e;
                        if (d = k.exec(h)) {
                            var r = d[1];
                            if (b = l(d[2]), c = new RegExp("on" + r + "=[\\'\"]\\s*" + b + "\\s*[\\'\"]", "i"), e = m(c, f[0])) return e;
                            if (c = new RegExp(b), e = m(c, f)) return e
                        }
                        return null
                    }
                }
                function p(a) {
                    if (!h(a.stack) && a.stack) {
                        for (var b, f, g = /^\s*at (.*?) ?\(((?:file|https?|blob|chrome-extension|native|eval|<anonymous>).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,
                        i = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|\[native).*?)(?::(\d+))?(?::(\d+))?\s*$/i,
                        j = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:ms-appx|https?|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,
                        l = a.stack.split("\n"), m = [], o = /^(.*) is undefined$/.exec(a.message), p = 0, q = l.length; q > p; ++p) {
                            if (b = g.exec(l[p])) {
                                var r = b[2] && -1 !== b[2].indexOf("native");
                                f = {
                                    url: r ? null: b[2],
                                    func: b[1] || k,
                                    args: r ? [b[2]] : [],
                                    line: b[3] ? +b[3] : null,
                                    column: b[4] ? +b[4] : null
                                }
                            } else if (b = j.exec(l[p])) f = {
                                url: b[2],
                                func: b[1] || k,
                                args: [],
                                line: +b[3],
                                column: b[4] ? +b[4] : null
                            };
                            else {
                                if (! (b = i.exec(l[p]))) continue;
                                f = {
                                    url: b[3],
                                    func: b[1] || k,
                                    args: b[2] ? b[2].split(",") : [],
                                    line: b[4] ? +b[4] : null,
                                    column: b[5] ? +b[5] : null
                                }
                            } ! f.func && f.line && (f.func = c(f.url, f.line)),
                            f.line && (f.context = e(f.url, f.line)),
                            m.push(f)
                        }
                        return m.length ? (m[0].line && !m[0].column && o ? m[0].column = n(o[1], m[0].url, m[0].line) : m[0].column || h(a.columnNumber) || (m[0].column = a.columnNumber + 1), {
                            name: a.name,
                            message: a.message,
                            url: d(),
                            stack: m
                        }) : null
                    }
                }
                function q(a) {
                    var b = a.stacktrace;
                    if (!h(a.stacktrace) && a.stacktrace) {
                        for (var f, g = / line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,
                        i = / line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^\)]+))\((.*)\))? in (.*):\s*$/i,
                        j = b.split("\n"), k = [], l = 0; l < j.length; l += 2) {
                            var m = null;
                            if ((f = g.exec(j[l])) ? m = {
                                url: f[2],
                                line: +f[1],
                                column: null,
                                func: f[3],
                                args: []
                            }: (f = i.exec(j[l])) && (m = {
                                url: f[6],
                                line: +f[1],
                                column: +f[2],
                                func: f[3] || f[4],
                                args: f[5] ? f[5].split(",") : []
                            }), m) {
                                if (!m.func && m.line && (m.func = c(m.url, m.line)), m.line) try {
                                    m.context = e(m.url, m.line)
                                } catch(n) {}
                                m.context || (m.context = [j[l + 1]]),
                                k.push(m)
                            }
                        }
                        return k.length ? {
                            name: a.name,
                            message: a.message,
                            url: d(),
                            stack: k
                        }: null
                    }
                }
                function r(a) {
                    var g = a.message.split("\n");
                    if (g.length < 4) return null;
                    var h, i = /^\s*Line (\d+) of linked script ((?:file|https?|blob)\S+)(?:: in function (\S+))?\s*$/i,
                    j = /^\s*Line (\d+) of inline#(\d+) script in ((?:file|https?|blob)\S+)(?:: in function (\S+))?\s*$/i,
                    k = /^\s*Line (\d+) of function script\s*$/i,
                    n = [],
                    o = document.getElementsByTagName("script"),
                    p = [];
                    for (var q in o) f(o, q) && !o[q].src && p.push(o[q]);
                    for (var r = 2; r < g.length; r += 2) {
                        var s = null;
                        if (h = i.exec(g[r])) s = {
                            url: h[2],
                            func: h[3],
                            args: [],
                            line: +h[1],
                            column: null
                        };
                        else if (h = j.exec(g[r])) {
                            s = {
                                url: h[3],
                                func: h[4],
                                args: [],
                                line: +h[1],
                                column: null
                            };
                            var t = +h[1],
                            u = p[h[2] - 1];
                            if (u) {
                                var v = b(s.url);
                                if (v) {
                                    v = v.join("\n");
                                    var w = v.indexOf(u.innerText);
                                    w >= 0 && (s.line = t + v.substring(0, w).split("\n").length)
                                }
                            }
                        } else if (h = k.exec(g[r])) {
                            var x = window.location.href.replace(/#.*$/, ""),
                            y = new RegExp(l(g[r + 1])),
                            z = m(y, [x]);
                            s = {
                                url: x,
                                func: "",
                                args: [],
                                line: z ? z.line: h[1],
                                column: null
                            }
                        }
                        if (s) {
                            s.func || (s.func = c(s.url, s.line));
                            var A = e(s.url, s.line),
                            B = A ? A[Math.floor(A.length / 2)] : null;
                            A && B.replace(/^\s*/, "") === g[r + 1].replace(/^\s*/, "") ? s.context = A: s.context = [g[r + 1]],
                            n.push(s)
                        }
                    }
                    return n.length ? {
                        name: a.name,
                        message: g[0],
                        url: d(),
                        stack: n
                    }: null
                }
                function s(a, b, d, f) {
                    var g = {
                        url: b,
                        line: d
                    };
                    if (g.url && g.line) {
                        a.incomplete = !1,
                        g.func || (g.func = c(g.url, g.line)),
                        g.context || (g.context = e(g.url, g.line));
                        var h = / '([^']+)' /.exec(f);
                        if (h && (g.column = n(h[1], g.url, g.line)), a.stack.length > 0 && a.stack[0].url === g.url) {
                            if (a.stack[0].line === g.line) return ! 1;
                            if (!a.stack[0].line && a.stack[0].func === g.func) return a.stack[0].line = g.line,
                            a.stack[0].context = g.context,
                            !1
                        }
                        return a.stack.unshift(g),
                        a.partial = !0,
                        !0
                    }
                    return a.incomplete = !0,
                    !1
                }
                function t(a, b) {
                    for (var e, f, g, h = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,
                    j = [], l = {},
                    m = !1, p = t.caller; p && !m; p = p.caller) if (p !== u && p !== i.report) {
                        if (f = {
                            url: null,
                            func: k,
                            line: null,
                            column: null
                        },
                        p.name ? f.func = p.name: (e = h.exec(p.toString())) && (f.func = e[1]), "undefined" == typeof f.func) try {
                            f.func = e.input.substring(0, e.input.indexOf("{"))
                        } catch(q) {}
                        if (g = o(p)) {
                            f.url = g.url,
                            f.line = g.line,
                            f.func === k && (f.func = c(f.url, f.line));
                            var r = / '([^']+)' /.exec(a.message || a.description);
                            r && (f.column = n(r[1], g.url, g.line))
                        }
                        l["" + p] ? m = !0 : l["" + p] = !0,
                        j.push(f)
                    }
                    b && j.splice(0, b);
                    var v = {
                        name: a.name,
                        message: a.message,
                        url: d(),
                        stack: j
                    };
                    return s(v, a.sourceURL || a.fileName, a.line || a.lineNumber, a.message || a.description),
                    v
                }
                function u(a, b) {
                    var c = null;
                    b = null == b ? 0 : +b;
                    try {
                        if (c = q(a)) return c
                    } catch(e) {
                        if (i.debug) throw e
                    }
                    try {
                        if (c = p(a)) return c
                    } catch(e) {
                        if (i.debug) throw e
                    }
                    try {
                        if (c = r(a)) return c
                    } catch(e) {
                        if (i.debug) throw e
                    }
                    try {
                        if (c = t(a, b + 1)) return c
                    } catch(e) {
                        if (i.debug) throw e
                    }
                    return {
                        name: a.name,
                        message: a.message,
                        url: d()
                    }
                }
                var v = {};
                return u.augmentStackTraceWithInitialElement = s,
                u.computeStackTraceFromStackProp = p,
                u.guessFunctionName = c,
                u.gatherContext = e,
                u
            } (),
            b.exports = i
        },
        {
            4 : 4
        }]
    },
    {},
    [3])(3)
});